这是我的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
答案 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");