Laravel 查询生成器选择数组内的返回列
Posted
技术标签:
【中文标题】Laravel 查询生成器选择数组内的返回列【英文标题】:Laravel Query Builder select return columns inside an array 【发布时间】:2021-06-04 00:57:53 【问题描述】:我有一个这样的查询:
$task_query = DB::table('table_a')
->join('materials', 'table_a.material_id', '=', 'materials.id')
->join('products', 'table_a.product_id', '=', 'products.id')
->select(
'table_a.colum_1',
'table_a.colum_2',
'table_a.colum_3',
'materials.colum_1 as material_column_1',
'materials.colum_2 as material_column_2',
'materials.colum_3 as material_column_3',
'products.colum_1 as product_column_1',
'products.colum_2 as product_column_2',
'products.colum_3 as product_column_3',
)
->when( some conditions )
->get();
此查询返回包含我想要的所有列的平面结果。但是,我需要一种方法将一些列分组为这样的子数组:
$task_query = DB::table('table_a')
->join('materials', 'table_a.material_id', '=', 'materials.id')
->join('products', 'table_a.product_id', '=', 'products.id')
->select(
'a' => [
'table_a.colum_1',
'table_a.colum_2',
'table_a.colum_3',
],
'material' => [
'materials.colum_1',
'materials.colum_2',
'materials.colum_3',
],
'product' => [
'products.colum_1',
'products.colum_2',
'products.colum_3',
],
)
->when( some conditions )
->get();
我该怎么做?
【问题讨论】:
你为什么不在那之后获取数据并构建和数组 foreach / !in_array @ReubenGomes,如果我能在查询中执行一次就更好了。如果我在查询后构建数组,那就很复杂了。我将花费太多的“if - elseif - else / in_array”语句来将每一列放入 $array_a 或 $array_m 或 $array_p。 @brombeer,谢谢。我更正了。 @QuangNguyen sql 无法将数据作为数组获取,您必须构建自己的数组帖子 【参考方案1】:据我所知,SQL 无法为您提供所需的结构。但是您可以使用map()
来重构您的第一个查询中的数据。
$data = $task_query->map(function($task)
return [
'a' => [$task->column_1, $task->column_2, $task->column_3],
'material' => [$task->material_column_1, $task->material_column_2, $task->material_column_3],
'product' => [$task->product_column_1, $task->product_column_2, $task->product_column_3]
];
);
然后你可以在你的结构中使用你的数据
foreach($data as $item)
$item['a'];
$item['material'];
$item['product'];
【讨论】:
以上是关于Laravel 查询生成器选择数组内的返回列的主要内容,如果未能解决你的问题,请参考以下文章
如何在 laravel 查询生成器中为 sql 选择列添加别名?
选择所有 3 列同时不为空的位置(Laravel 查询生成器)
Laravel - 使用 Eloquent 查询构建器在选择中添加自定义列