代码之家  ›  专栏  ›  技术社区  ›  DarkFenix

如何通过id的Laravel数组获取列表的记录

  •  0
  • DarkFenix  · 技术社区  · 6 年前

    目前我有两个表,典型的master-detail,我从detail表中得到一个id数组,[1,2,3,4,5,…],我想从中生成一个分组,以获得由master分组的细节

    public function details()
    {
        return $this->hasMany('App\Models\Detail', 'detail_id');
    }
    

    细节

    public function master()
    {
        return $this->belongsTo('App\Models\Master', 'master_id');
    }
    

    [1,2,3,4,5..]

    return Detail::whereIn('id', $array)->with(['master' => function($query){
            $query->groupBy('name');
        }])->get();
    

    我的问题,这不是重复的,是什么让这个问题是得到我们已经拥有的ID,我想要的是 . 关闭是不正确的;)

    1 回复  |  直到 6 年前
        1
  •  0
  •   Elliot    6 年前

    总之,我不相信雄辩支持groupBy(您必须编写自己的查询);并且您没有对所有列进行分组。

    您的查询没有修改要选择的列,因此laravel将被删除 selecting all of them ; 因此,像您的ID这样独特的东西将打破这些组。您需要明确说明要启用组所选择的内容,或者明确说明如何汇总其他列。

    docs

    但请注意,其他示例(如本例)将分组函数应用于所有选定列:

    $users = DB::table('users')
                 // count is a grouping function; status is grouped below
                 ->select(DB::raw('count(*) as user_count, status'))
                 ->where('status', '<>', 1)
                 ->groupBy('status')
                 ->get();
    

    分组是你真正想要的吗?分组汇总表,例如通过提供的总计、计数或唯一的“名称”。如果需要手动修改上面的示例,请手动修改。

    orderBy 功能。在这种情况下,您可以按如下方式修改代码:

    return Detail::whereIn('id', $array)
        ->with('master')
        ->groupBy('name')
        ->get();
    

    name 是主表和明细表之间的唯一列名。