【问题标题】:Laravel Query Builder select return columns inside an arrayLaravel 查询生成器选择数组内的返回列
【发布时间】: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 无法将数据作为数组获取,您必须构建自己的数组帖子

标签: arrays laravel select eloquent


【解决方案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'];
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2020-06-24
    • 2015-03-26
    • 2015-12-24
    • 2021-04-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-02-16
    相关资源
    最近更新 更多