laravel 查询 - 加入 2 个表和 groupBy 相同的 ID

Posted

技术标签:

【中文标题】laravel 查询 - 加入 2 个表和 groupBy 相同的 ID【英文标题】:laravel query - join 2 table and groupBy same ID 【发布时间】:2021-08-06 07:30:50 【问题描述】:

我有两张这样的桌子

表Base_infos

| id |base_name|
+----+---------+
|  1 |   name1 |
|  2 |   name2 |
|  3 |   name3 |
|  4 |   name4 |
|  5 |   name5 |
|  6 |   name6 |

表基类型

+----+---------+---------+
| id |  base_id|     type|
+----+---------+---------+
|  1 |       1 |       1 |
|  2 |       2 |       0 |
|  3 |       3 |       1 |
|  4 |       4 |       0 |
|  5 |       5 |       1 |
|  6 |       6 |       1 |
|  7 |       6 |       0 |

我的查询是这样的

$datas = DB::table('base_infos')
    ->select('base_infos.id as id', 'base_infos.base_name', 'base_types.type')
    ->join('base_types', 'base_infos.id', '=', 'base_types.id')
    ->groupBy('base_infos.id')
    ->get();

但是数据只返回这样的表base_types的第一条记录

'id':'6' 'base_name':'name6' '类型':'0'

如何在一行中显示所有类型?我正在使用 Laravel 7 和 mysql

【问题讨论】:

您的加入条件似乎也有误。 base_id 列的意义何在? (提示) 【参考方案1】:

为什么需要groupBy('base_infos.id')? id 不是唯一的,如果是这样,您就不需要该分组。

【讨论】:

我需要合并 base_infos 表的 id 相同的行,这就是我使用 groupBy 的原因【参考方案2】:

您是否管理模型中的关系? 如果你已经在模型中设置了关系,你可以使用这个方法来合并/GroupBy关系之间 我用了这个方法,效果很好

// Displays the most purchased items [ TAMPIL ]
    $most_item_buy = Item::with(["item_orders" => function($query) 
        $month = date('m');
        $year = date('Y');

        $query->selectRaw('*, sum(item_order_details.quantity) as total_item');
        $query->groupBy('pivot_item_id');
        
        $query->where("order_status", "=", "FINISH");
        $query->whereMonth("item_orders.created_at", $bulan);
        $query->whereYear("item_orders.created_at", $tahun);

    , "item_images"])
        ->withTrashed()
        ->get();

【讨论】:

我确实有模特关系,谢谢。我解决了我的问题

以上是关于laravel 查询 - 加入 2 个表和 groupBy 相同的 ID的主要内容,如果未能解决你的问题,请参考以下文章

选择加入2个表和两个表的最新记录

加入 3 个表,从 2 个不同的表和按材料名称分组的总数量

查询从 3 个表中获取数据,主表和总和列从彼此 2 个表中获取

慢查询分组,加入MYSQL laravel

Laravel 加入 3 个表

mysql加入2个表 - 但必须加入同一个表两次