Laravel: Как получить единую строку разворота по идентификатору ключа

У меня есть отношение многие ко многим на моем пользователь а также уведомление Красноречивые модели. Таким образом, я могу получить доступ к сводной таблице — 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()?

7

Решение

Вы можете использовать where пункт об отношениях:

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

Другие решения

Вы также можете напрямую использовать find метод.

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

Я имел дело с этим, и ответ Лукасгейтера в порядке, до странного случая, когда вы хотите найти сводную строку Я бы (если вы создали $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');
}
0
По вопросам рекламы [email protected]