Любой способ получить все строки таблицы, где внешний ключ совпадает с первичным ключом, используя только модели, а не напрямую обращаться к базе данных?

У меня две модели: 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);