我有一个模型,我试图链接多个withCounts与不同的关系.这是一个例子:
return MyModel::query()
->withCount(array('users'=>function($query){
$query->where('enabled', '=', 1);
}))
->withCount(array('users'=>function($query){
$query->where('phone', '=', "123-4567");
}))
->get();
Run Code Online (Sandbox Code Playgroud)
这不起作用,因为Laravel在我的结果中自动返回一个名为"users_count"的snake_case字段名称,基本上这意味着查询的启用部分将被电话部分覆盖.
我已经深入了解了Builder.php类,并注意到$ asColumn是返回的名称:https://github.com/laravel/framework/commit/67b821dde62e64f94aa7d99f1806ecf03ea323e5,其中提到的只是关系$的snake_case name +'_ count'.
有没有办法在不使用原始查询的情况下创建自定义$ asColumn,以便我可以获得两个结果?我基本上希望我的结果是enabled_users_count和phone_users_count,或类似的东西.我也不想做2个不同的查询.
pat*_*cus 11
此功能自Laravel 5.3.7起,于2016-09-08发布.
假设您使用的是5.3.7或更高版本,则只需要as new_name在withCount方法中添加关系字符串,并将计数字段命名为new_name_count.所以,你的代码看起来像:
return MyModel::query()
->withCount(array('users as enabled_users'=>function($query){
$query->where('enabled', '=', 1);
}))
->withCount(array('users as phone_users'=>function($query){
$query->where('phone', '=', "123-4567");
}))
->get();
Run Code Online (Sandbox Code Playgroud)
此代码将生成enabled_users_count字段和phone_users_count字段.
如果你不是这个版本,并且无法升级,你将需要走定义新关系的路线,如@RossWilson所述.
我所知道的唯一方法是为这些条件定义不同的关系,然后将它们withCount与例如
public function enableUsers()
{
return $this->hasMany(User::class) //Or whatever the relationship is
->where('enabled', '=', 1);
}
Run Code Online (Sandbox Code Playgroud)
然后:
MyModel::withCount('enabledUsers', 'phoneUsers')->get();
Run Code Online (Sandbox Code Playgroud)
希望这可以帮助!
| 归档时间: |
|
| 查看次数: |
1261 次 |
| 最近记录: |