Laravel: 如何通过键 id 获取单个数据透视行
Laravel: How to get single pivot row by key id
我在 User 和 Notification Eloquent 模型上设置了多对多关系。这样我就可以访问枢轴 table - user_notifications - 如下所示:
$user = User::find(1);
foreach ($user->notifications() as $n) {
echo $n->pivot->created_at;
}
这将为 ID = 1 的用户提供数据透视表 table 中的所有 created_at
字段值。
如果我只需要 一个 主元行怎么办,比如说 notification_id = 2?有没有办法将 pivot
与 where
或 has
结合起来?不循环$user->notifications()
可以吗?
您可以在关系上使用 where
子句:
$notification = $user->notifications()->where('notification_id', 2)->first();
echo $notification->pivot->created_at;
也可以直接使用find
方法。
$notification = $user->notifications()->find(2);
echo $notification->pivot->created_at;
我一直在处理这个问题,lukasgeiter 的回答很好,直到你想通过 id 找到一个数据透视行的奇怪情况(如果你设置了 $table->increments('id')
数据透视表上的列 table。我有时会这样做,但更好的解决方案是为关系使用专用模型(定义自定义中间 Table 模型@https://laravel.com/docs/5.6/eloquent-relationships)
在这种奇怪的情况下你可以做什么:
$notification = $user->notifications()->having('pivot_id', 2)->first();
echo $notification->pivot->created_at;
您必须在模型的关系方法中包含 withPivot('id')
。即
function notifications() {
return $this->belongsToMany('App\Notification')->withPivot('id');
}
我在 User 和 Notification Eloquent 模型上设置了多对多关系。这样我就可以访问枢轴 table - user_notifications - 如下所示:
$user = User::find(1);
foreach ($user->notifications() as $n) {
echo $n->pivot->created_at;
}
这将为 ID = 1 的用户提供数据透视表 table 中的所有 created_at
字段值。
如果我只需要 一个 主元行怎么办,比如说 notification_id = 2?有没有办法将 pivot
与 where
或 has
结合起来?不循环$user->notifications()
可以吗?
您可以在关系上使用 where
子句:
$notification = $user->notifications()->where('notification_id', 2)->first();
echo $notification->pivot->created_at;
也可以直接使用find
方法。
$notification = $user->notifications()->find(2);
echo $notification->pivot->created_at;
我一直在处理这个问题,lukasgeiter 的回答很好,直到你想通过 id 找到一个数据透视行的奇怪情况(如果你设置了 $table->increments('id')
数据透视表上的列 table。我有时会这样做,但更好的解决方案是为关系使用专用模型(定义自定义中间 Table 模型@https://laravel.com/docs/5.6/eloquent-relationships)
在这种奇怪的情况下你可以做什么:
$notification = $user->notifications()->having('pivot_id', 2)->first();
echo $notification->pivot->created_at;
您必须在模型的关系方法中包含 withPivot('id')
。即
function notifications() {
return $this->belongsToMany('App\Notification')->withPivot('id');
}