Laravel:如何通过密钥ID获得单个轴

时间:2015-02-06 10:21:18

标签: php laravel eloquent pivot-table

我的用户通知 Eloquent模型上设置了多对多关系。这样我就可以访问数据透视表 - user_notifications - 如下所示:

$user = User::find(1);
foreach ($user->notifications() as $n) {
    echo $n->pivot->created_at;
}

对于ID = 1的用户,这将为数据透视表中的所有created_at字段值提供。

如果我需要只有一个支点行,请说明 notification_id = 2 ?有没有办法将pivotwherehas合并?可以在没有循环$user->notifications()的情况下完成吗?

3 个答案:

答案 0 :(得分:8)

您可以在关系中使用where子句:

$notification = $user->notifications()->where('notification_id', 2)->first();
echo $notification->pivot->created_at;

答案 1 :(得分:5)

您也可以直接使用find方法。

$notification = $user->notifications()->find(2);
echo $notification->pivot->created_at;

答案 2 :(得分:0)

我一直在处理这个问题,并且lukasgeiter的答案很好,直到你想通过 id 找到一个支点行的奇怪情况(如果你设置了一个数据透视表上的$table->increments('id')列。我有时会这样做,但更好的解决方案是使用专用的关系模型(定义自定义中间表模型 @ https://laravel.com/docs/5.6/eloquent-relationships)< / p>

在这个奇怪的案例中你可以做些什么:

$notification = $user->notifications()->having('pivot_id', 2)->first();
echo $notification->pivot->created_at;

您必须在模型中的关系方法中加入withPivot('id')。即。

function notifications() {
    return $this->belongsToMany('App\Notification')->withPivot('id');
}