У меня две модели: User and Lesson. Уроки привязаны к пользователям с помощью внешнего ключа user_id в уроках. Я хочу сказать «дайте мне все уроки для пользователя 8», но единственный способ, которым я смог это сделать, – пройти через класс DB
$lessons = DB::table('lessons')->where('user_id','=',8)->get();
Есть ли способ сделать что-то подобное?
$lessons = Lesson::all()->where('user_id','=',8);
или (еще лучше)
$lessons = User::find(8)->lessons();
Просто интересно, потому что последние два пути имеют больше смысла. Просто интересуюсь!
Вы можете попробовать что-то вроде этого:
$lessons = Lesson::where('user_id', 8)->get(); // '=' is optional
Или user
с уроками:
$userWithLessons = User::with('lessons')->find(8);
Также User::find(8)->lessons;
будет работать, но с нетерпением загрузки ( with('lessons')
) лучше.
Другой способ, зависящий от id
в таблице users
:
// pass the id in $id $lessons = Lesson::with('user')->whereHas('user', function($q) use ($id){ $q->where('id', $id); })->get();
Обновление: вы можете попробовать
// pass the id in $id $id = 8; // user id $lesson71 = Lesson::with('users')->whereHas('users', function($q) use ($id){ $q->where('id', $id); })->find(71);