为了账号安全,请及时绑定邮箱和手机立即绑定

将 SQL 转换为 Laravel

将 SQL 转换为 Laravel

PHP
慕婉清6462132 2021-09-18 15:55:50
假设我有这个: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]:语法错误或访问冲突: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 = ?)我认为这样说是有错误的,那就是它得到了类型系统错误。因此,如果有人知道更好的方法,您可以提供帮助。
查看完整描述

3 回答

?
大话西游666

TA贡献1817条经验 获得超14个赞

这在 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();


查看完整回答
反对 回复 2021-09-18
?
猛跑小猪

TA贡献1858条经验 获得超8个赞

您可以尝试使用

$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.'"));


查看完整回答
反对 回复 2021-09-18
?
蓝山帝景

TA贡献1843条经验 获得超7个赞

试试这个,


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


查看完整回答
反对 回复 2021-09-18
  • 3 回答
  • 0 关注
  • 138 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信