У меня есть отношение многие ко многим на моем пользователь а также уведомление Красноречивые модели. Таким образом, я могу получить доступ к сводной таблице — user_notifications — следующее:
$user = User::find(1);
foreach ($user->notifications() as $n) {
echo $n->pivot->created_at;
}
Это даст мне все created_at
значения полей из сводной таблицы, для пользователя с ID = 1.
Что если мне нужно только один сводный ряд, скажем, тот, с tification_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;
Я имел дело с этим, и ответ Лукасгейтера в порядке, до странного случая, когда вы хотите найти сводную строку Я бы (если вы создали $table->increments('id')
столбец в сводной таблице. Я делаю это иногда, но лучшим решением является использование выделенной модели для отношений (Определение пользовательских моделей промежуточных таблиц @ 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');
}