Laravel Eloquent:我的数据透视表有关系
Posted
技术标签:
【中文标题】Laravel Eloquent:我的数据透视表有关系【英文标题】:Laravel Eloquent: My Pivot table has relation 【发布时间】:2020-08-22 21:43:51 【问题描述】:这里有一些关于表格的信息
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 透视模型
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::contribution()
【问题讨论】:
【参考方案1】:您可以使用custom pivot table model。
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');
希望对你有帮助。
【讨论】:
如何调用contribution()? 类似问题:***.com/questions/25234650/…【参考方案2】:受this 问题的启发。我们不能在枢轴对象上调用函数。
解决办法是:
首先,将 UserProduct 添加到 aliases,以便我们可以在 blade 中调用它。
配置\app.php:
'aliases' => [
'UserProduct' => App\UserProduct::class,
],
然后,使用 find 函数然后调用 relation 函数
刀片:
@foreach ($product->users as $user)
@foreach (UserProduct::find($user->pivot->id)->contribution()->get() as $contribution)
// viewing contribution attribute
@endforeach
@endforeach
不要忘记包含数据透视 ID
产品型号:
public function users()
return $this->belongsToMany('App\User')
->withPivot(['id']);
【讨论】:
以上是关于Laravel Eloquent:我的数据透视表有关系的主要内容,如果未能解决你的问题,请参考以下文章
如何对 Eloquent 关系中的数据透视表列进行 GROUP 和 SUM?
如何在 laravel 5 中使用 Eloquent 更新数据透视表