假设我有这个:
SELECT * FROM drivers where driver_number NOT IN (SELECT driver_number FROM buses) AND station_id = 2 OR driver_number = 'Dr_02'
然后我想以 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]: Syntax error or access violation: 1064 You have an error in your SQL syntax; check the manual that corresponds to your MariaDB server version for the right syntax to use near 'driver_number not in (select driver_number from buses) AND station_id = ?' at line 1 (SQL: select * from
drivers
where id = 2 driver_number not in (select driver_number from buses) AND station_id = ?)
我认为它的表达方式有误,那就是类型系统错误。因此,如果有人知道更好的方法,您可以提供帮助。
最佳答案
这在 Laravel 中很难处理。 WHERE
子句中的逻辑基本上是 (A 和 B)或 C
,其中条件 A
可以用 NOT EXISTS 表示
MySQL 中的子查询。
$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();
关于php - 将 SQL 转换为 Laravel,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56823968/