У меня две таблицы:
bookings(id,lessons_id,user_id,permit_id)
lessons(id,name,date)
Мне нужно выбрать все уроки, в которых пользователь user_id <>$user
Я сделал следующее, но это не совсем правильно.
$user = Auth::id();
$lesson = DB::table('lessons')
->whereNotExists(function ($query) {
$query->select(DB::raw(1))
->from('bookings')
->whereRaw('bookings.lessons_id', '=', 'lessons.id')
->where(' bookings.user_id',' <>', '$user');
})
->get();
Попробуйте использовать функцию whereNotExists
:
DB::table('lessons')
->whereNotExists(function ($query) {
$query->select(DB::raw(1))
->from('bookings')
->whereRaw('bookings.lessons_id = lessons.id AND
bookings.user_id = ?', [$user]);
})
->get();
Это будет соответствовать следующему необработанному запросу MySQL:
SELECT *
FROM lessons t
WHERE NOT EXISTS (SELECT 1 FROM bookings b
WHERE b.lessons_id = t.id AND b.user_id = 2);
2
в вашем коде.