如何在 Laravel 的 DB::Select() 中按变量添加 SQL 查询

Posted

技术标签:

【中文标题】如何在 Laravel 的 DB::Select() 中按变量添加 SQL 查询【英文标题】:How to add SQL query by variable in DB::Select() in Laravel 【发布时间】:2021-02-24 02:21:35 【问题描述】:

我有一个DB::select() 查询,我想在其中按变量添加动态 SQL。

这是我正在尝试做的,但它返回 SQL 语法错误。

$restaurantSql = "";
$restaurantIds = [6,43,51];

if ($someOtherVariable) 
    $restaurantSql = "AND orders.restaurant_ids IN (".implode(",", $restaurantIds).")";


$result = DB::select(
    "SELECT *
    FROM orders
    JOIN restaurants ON orders.restauant_id = restaurants.id
    WHERE orders.status = 'complete' :restaurant_sql AND
    orders.created_at >= :start_date",
    ["restaurant_sql" => $restaurantSql, "start_date" => $startDate]
);

start_date 按照 Laravel 的文档工作,但 restaurant_sql 不起作用。知道如何实现这一目标吗?

【问题讨论】:

【参考方案1】:

我认为你的问题在这里

$result = DB::select(
    "SELECT *
    FROM orders
    JOIN restaurants ON orders.restauant_id = restaurants.id
    WHERE orders.status = 'complete'". $restaurantSql. "AND
    orders.created_at >= :start_date",
    ["restaurant_sql" => $restaurantSql, "start_date" => $startDate]
);

【讨论】:

我不想添加餐厅 id,我想动态添加整个 SQL。 好的,我知道了,我改了代码。请再检查一遍 不知道它可以这样工作。谢谢sm

以上是关于如何在 Laravel 的 DB::Select() 中按变量添加 SQL 查询的主要内容,如果未能解决你的问题,请参考以下文章

有 DB::select() 时如何使用 laravel 关系?

在刀片中显示 laravel DB::select 数组

如何在原始 sql WHERE IN [LUMEN/LARAVEL] 中绑定命名参数

在 Laravel 7.x 中从 DB::select 获取单个值

在 Laravel 4 中转义原始 SQL 查询

Laravel DB::select() 不返回“正确”数据