使用 Laravel db builder 在查询中执行 WITH MySQL 表达式

Posted

技术标签:

【中文标题】使用 Laravel db builder 在查询中执行 WITH MySQL 表达式【英文标题】:Execute WITH MySQL expression in a query using Laravel db builder 【发布时间】:2021-06-29 10:04:55 【问题描述】:

找不到任何有关如何执行类似操作的信息

WITH table AS (
    SELECT colA, colB
    FROM table2 INNER JOIN table1 ON table1.id = table2.colA
),
table4 AS (
    SELECT moo, foo
    INNER JOIN table3 ON table3.colC = table4.colD
),
......

使用 Laravel 数据库查询构建器和表达式 WITH 有没有人构建过这样的查询并知道如何执行?

【问题讨论】:

【参考方案1】:

完全可以,我经常用。

例如,我有一个 $query 和一个名为 $params 的数组(准备好的语句)。

比我做的:

$connection = DB::connection('mysql'); 
$connection->getPdo()->setAttribute(PDO::ATTR_EMULATE_PREPARES, true); 

$result = $connection->select($query, $params);

我需要PDO::ATTR_EMULATE_PREPARES,因为我重复了params(例如,在查询中多次:user_id)。

所以基本上,我使用原始查询。也可以在 eloquent 模型上使用这样的查询,在这种情况下,它将返回您在 Laravel 中习惯的模型。但是这个例子确实展示了基本版本。

【讨论】:

以上是关于使用 Laravel db builder 在查询中执行 WITH MySQL 表达式的主要内容,如果未能解决你的问题,请参考以下文章

如何在 Laravel 4.2 中创建自定义 DB Query Builder 方法

如何在 Laravel Query Builder 中执行 TRIM() 和 CONCAT()?

Laravel 使用查询生成器进行嵌套连接查询

Laravel Query Builder Group未获得所有记录

如何在 json 数据 laravel 5.1 中查询 Builder

Laravel Query Builder 在“whereIn”语句的子查询中使用父查询?