php - 将 SQL 转换为 Laravel

标签 php mysql laravel eloquent laravel-query-builder

假设我有这个:

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

并显示这些数据 enter image description here

然后我想以 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/

相关文章:

php - 加密存储的图像

php - 将 php 变量传递给 html

php - 安装 pdo_mysql 时出现错误 : cannot find php_pdo_driver. h

php - 如何在数据库中查找与输入字符串最相似的字符串

php - 默认包含的 Blade 模板产量

php - 将自定义字段添加到管理产品 在 WooCommerce 3.2+ 中批量编辑

php - get_browser() 返回 FALSE

javascript - img 通过更改它的 src 并由动态提供的源(mysql 和 php)使用 Javascript 绘制

laravel - mkdir() : No such file or directory - laravel

php - Laravel 5 与 SAML 2 与现有 IDP 集成