Laravel按一种类型的列分组,也仅按该类型排序

时间:2018-12-04 07:31:29

标签: php mysql laravel eloquent

这是我的foo表:

----------------------------
id | name | type | parent_id
----------------------------
 1    a   |  foo |   null
 2    b   |  bar |    1
 3    c   |  baz |    1
 4    d   |  foo |    1
 5    e   |  baz |    1
 6    f   |  bar |    1
 7    f   |  baz |    1

这是与此表关联的模型:

class Foo extends Model {

    public function childs()
    {
        return $this->hasMany(Foo ::class, 'parent_id');
    }

    public function parent()
    {
        return $this->belongsTo(Foo ::class, 'parent_id');
    }

}

在我的控制器中:

$foo = Foo::find(1);

,我的问题是我如何才能使$foo模型的所有子级仅按类型列的baz部分进行排序和分组。像这样的表:


id | name | type | parent_id
----------------------------
 5    e   |  baz |    1
 7    f   |  baz |    1
 3    c   |  baz |    1
 1    a   |  foo |   null
 2    b   |  bar |    1
 4    d   |  foo |    1
 6    f   |  bar |    1

2 个答案:

答案 0 :(得分:1)

groupBy /具有

groupBy和具有方法可用于对查询结果进行分组。 Have方法的签名类似于where方法的签名:

$users = DB::table('users')
                ->groupBy('account_id')
                ->having('account_id', '>', 100)
                ->get();

您可以将多个参数传递给groupBy方法,以按多列进行分组:

$users = DB::table('users')
                ->groupBy('first_name', 'status')
                ->having('account_id', '>', 100)
                ->get();

有关更多信息,请阅读official documentation

答案 1 :(得分:1)

您可以尝试类似的操作:

orderByRaw("FIELD(name, 'Baz') ASC");