Получите разные строки

0

У меня две таблицы:

  • 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();
  • 0
    Что вы подразумеваете под "не совсем правильно"?
  • 0
    Я не вижу номер 2 в вашем коде.
Показать ещё 4 комментария
Теги:
laravel-5

1 ответ

0
Лучший ответ

Попробуйте использовать функцию 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);
  • 0
    bookings.user_id <> Auth :: user () -> id; дает мне синтаксическую ошибку, как я могу написать это
  • 0
    Я не понимаю, что вы пытаетесь сделать. Вы получаете точную ошибку, используя мой ответ?
Показать ещё 17 комментариев

Ещё вопросы

Сообщество Overcoder
Наверх
Меню