Laravel Eloquent: Моя сводная таблица имеет отношение - PullRequest
0 голосов
/ 07 мая 2020

Здесь некоторая информация о таблице

User table
-id
-name

UserProduct table
-id
-user_id
-product_id

Product table
-id
-name

Contribution
-id
-user_product_id
-contribution

Модель пользователя

public function products()
{
    return $this->belongsToMany('App\Product');
}

Модель продукта

public function users()
{
    return $this->belongsToMany('App\User');
}

Модель UserProduct Pivot

use Illuminate\Database\Eloquent\Relations\Pivot;

class UserProduct extends Pivot

{
    public function contribution()
    {
        return $this->hasMany('App\Contribution');
    }
}

Я пробую, например, auth()->user()->products()->first()->pivot->contribution(), но это дает некоторую ошибку.

Вызов неопределенного метода Illuminate \ Database \ Eloquent \ Relations \ Pivot :: вклад ()

Ответы [ 2 ]

1 голос
/ 07 мая 2020

не могли бы вы использовать модель пользовательской сводной таблицы .

class UserProduct extends Pivot
{
  public function contribution()
  {
    return $this->belongsTo('App\Contribution');
  }
}
// User model

public function products()
{
    return $this->belongsToMany('App\Product')->using('App\UserProduct');
}

Надеюсь, это вам поможет.

0 голосов
/ 21 мая 2020

На основе этой задачи. Мы не можем вызвать функцию для объекта сводки.

Решение было:

Сначала добавьте UserProduct к псевдонимам , чтобы мы можно вызвать его в blade .

config \ app. php:

'aliases' => [
   'UserProduct' => App\UserProduct::class, 
],

Затем используйте функцию find , затем вызовите отношение функцию

Blade:

@foreach ($product->users as $user)
    @foreach (UserProduct::find($user->pivot->id)->contribution()->get() as $contribution)
         // viewing contribution attribute
    @endforeach
@endforeach

Не забудьте указать идентификатор оси

Модель продукта:

public function users()
{
    return $this->belongsToMany('App\User')
                ->withPivot(['id']);
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...