我有两个表:


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);

关于mysql - 获取不同的行,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/49665420/

10-12 01:06