将 SQL 转换为 Laravel

假设我有这个:

SELECT * FROM drivers where driver_number NOT IN (SELECT driver_number FROM buses) AND station_id = 2 OR driver_number = 'Dr_02'

它显示这些数据

http://img.mukewang.com/61459b9a000173a109350085.jpg

然后我想将这些数据作为 Laravel 查询获取,这就是我所做的:

$drivers = Driver::whereRaw('driver_number not in (select driver_number from buses) AND station_id = ? ', [$station_id].' OR id = ?', [$bus->Driver_id])
                    ->get();

但我收到此错误:

SQLSTATE[42000]:语法错误或访问冲突:1064 你的 SQL 语法有错误;检查与您的 MariaDB 服务器版本相对应的手册,了解在“driver_number not in (select driver_number from bus) AND station_id = ?”附近使用的正确语法 在第 1 行(SQL:select * from driverswhere id = 2 driver_number not in (select driver_number from bus) AND station_id = ?)

我认为这样说是有错误的,那就是它得到了类型系统错误。因此,如果有人知道更好的方法,您可以提供帮助。


慕婉清6462132
浏览 139回答 3
3回答

大话西游666

这在 Laravel 中处理起来很棘手。您的WHERE子句中的逻辑基本上是(A and B) or C,其中条件A可以由NOT EXISTSMySQL 中的子查询表示。$drivers = DB::table('Driver d')    ->where(function($query1) {        return $query1            ->whereNotExists(function ($query2) {                $query2->select(DB::raw(1))                    ->from('buses b')                    ->whereRaw('d.driver_number = b.driver_number');              })            ->where('station_id', '=', '2');    })    ->orWhere('driver_number', '=', 'Dr_02');->get();

猛跑小猪

您可以尝试使用$task_without_due_date = \DB::select(\DB::raw("SELECT * FROM drivers where driver_number NOT IN (SELECT driver_number FROM buses) AND station_id = '.$station_id.' OR driver_number = '.$bus->Driver_id.'"));

蓝山帝景

试试这个,$result = DB::table('drivers')->whereNotIn('driver_number', function($q){    $q->select('driver_number')->from('buses');})->where('station_id', '=', 2)->where('driver_number', '=', 'Dr_02')->get();
打开App,查看更多内容
随时随地看视频慕课网APP