如何使用 Laravel Eloquent 和 Laravel Query Builder 进行联合查询?

Posted

技术标签:

【中文标题】如何使用 Laravel Eloquent 和 Laravel Query Builder 进行联合查询?【英文标题】:How to make a union query using Laravel Eloquent and Laravel Query Builder? 【发布时间】:2020-02-20 11:56:28 【问题描述】:

我正在使用 laravel eloquent 来处理 CRUD 数据。 我的问题是,我不知道如何使用 laravel Eloquent ORM 进行 UNION 查询。 你能帮我解决我的问题吗?

这是我想在 laravel Eloquent 或 Query Builder 中实现的示例查询

SELECT in_records.item_id, 
       in_records.date, 
       in_records.value AS 'IN', 
       ''               AS 'OUT', 
       in_records.USER 
FROM   in_records 
UNION 
SELECT out_records.item_id, 
       out_records.date, 
       ''                AS 'IN', 
       out_records.value AS 'OUT', 
       out_records.USER 
FROM   out_records 
ORDER  BY date

【问题讨论】:

【参考方案1】:
$first= DB::table("in_records")
    ->select(" in_records.item_id,
        in_records.date,
        in_records.value AS 'IN',
        '' AS 'OUT',
        in_records.user");

$final= DB::table("out_records")
    ->select(" out_records.item_id,
         out_records.date,
         '' AS 'IN', 
         out_records.value AS 'OUT',
         out_records.user")
    ->union($first)
    ->get();

或者你可以像这样合并结果:

$a = Table::where('column','value')->get();
$b = Album::where('column','value')->get();
$result = $a->merge($b);

【讨论】:

谢谢@Danyal Sandeelo,.. 我在->select() 的参数处添加了DB::RAW() 查询生成器,以便我可以添加空格列。前任。 ->select( DB::raw(" item_id, date, items.description as 'item', users.name as 'user', '' as 'ADD', in_records.value as 'IN', '' as 'OUT', '' as 'BONES', '' as 'SCRAPS' "))

以上是关于如何使用 Laravel Eloquent 和 Laravel Query Builder 进行联合查询?的主要内容,如果未能解决你的问题,请参考以下文章

如何使用 Laravel 4 Eloquent 连接列?

在使用 tinker CLI 时,Laravel 如何在 Eloquent 模型上查找和显示动态属性?

如何在 Laravel/Eloquent 中获得完整的关系

如何使用 Laravel Eloquent 创建子查询?

Laravel Eloquent 坚持 1:n

Laravel 5:如何使用 'where' 或 'orderBy' 使用 eloquent?