Как найти данные, основанные на отношениях «Многие ко многим» в Laravel 5.8

#php #laravel #many-to-many #laravel-5.8 #laravel-relations

Вопрос:

У меня есть Много-много отношений между Моделью пользователя и моделью Кошелька:

Wallet.php :

 public function users()
    {
        return $this->belongsToMany(User::class);
    }
 

И User.php :

 public function wallets()
    {
        return $this->belongsToMany(Wallet::class);
    }
 

И у меня есть эти три таблицы, связанные с кошельками:

Стол wallets :

 public function up()
    {
        Schema::create('wallets', function (Blueprint $table) {
            $table->bigIncrements('id');
            $table->string('title');
            $table->string('name')->unique();
            $table->tinyInteger('is_active');
            $table->tinyInteger('is_cachable');
            $table->timestamps();
        });
    }
 

Стол user_wallet :

 public function up()
    {
        Schema::create('user_wallet', function (Blueprint $table) {
            $table->bigIncrements('id');
            $table->unsignedBigInteger('user_id');
            $table->foreign('user_id')->references('usr_id')->on('users');
            $table->unsignedBigInteger('wallet_id');
            $table->foreign('wallet_id')->references('id')->on('wallets');
            $table->integer('balance');
            $table->timestamps();
        });
    }
 

И стол user_wallet_transactions :

 public function up()
    {
        Schema::create('user_wallet_transactions', function (Blueprint $table) {
            $table->bigIncrements('id');
            $table->unsignedBigInteger('user_id');
            $table->foreign('user_id')->references('usr_id')->on('users');
            $table->unsignedBigInteger('wallet_id');
            $table->foreign('wallet_id')->references('id')->on('wallets');
            $table->string('amount');
            $table->string('description');
            $table->timestamps();
        });
    }
 

Теперь мне нужно показать кошельки одного пользователя. Поэтому на users.index Лезвии я добавил это:

 <a href="{{ route('user.wallet', $user->usr_id) }}" class="fa fa-wallet text-dark"></a>
 

И отправьте пользовательские данные контроллеру вот так:

 public function index(User $user)
    {
        // retrieve user_wallet information
        return view('admin.wallets.user.index', compact(['user']));
    }
 

Но я не знаю, как получить user_wallet информацию этим методом.

Итак, как получить данные user_wallet в этой ситуации.

Я был бы очень признателен за любую идею или предложение от вас, ребята, по этому поводу…

Заранее спасибо.

Ответ №1:

Один из способов-принять param как $id

 public function index($id)
 

затем

 User::with('wallets')->has('wallets')->find($id);
 

Комментарии:

1. Итак, вы имеете в виду, что я должен удалить User $user как параметр этого метода?

2. если вам нужны сведения как о пользователе, так и о кошельке, я думаю, это хорошо .или же вы можете сделать $wallet=$user->кошельки; это вернет сведения о кошельках отдельно. Возможно, есть другое решение, но я использую большую часть времени этот подход