我有一个模型,我试图链接多个withCounts与不同的关系.这是一个例子:
return MyModel::query()
->withCount(array('users'=>function($query){
$query->where('enabled', '=', 1);
}))
->withCount(array('users'=>function($query){
$query->where('phone', '=', "123-4567");
}))
->get();
这不起作用,因为Laravel在我的结果中自动返回一个名为“users_count”的snake_case字段名称,基本上这意味着查询的启用部分将被电话部分覆盖.
我稍微瞥了一下Builder.PHP类,注意到$asColumn是返回的名字:https://github.com/laravel/framework/commit/67b821dde62e64f94aa7d99f1806ecf03ea323e5,就像提到的那样只是关系$name’_count’的snake_case.
有没有办法在不使用原始查询的情况下创建自定义$asColumn,以便我可以获得两个结果?我基本上希望我的结果是enabled_users_count和phone_users_count,或类似的东西.我也不想做2个不同的查询.
解决方法:
此功能自Laravel 5.3.7起,于2016-09-08发布.
假设您使用的是5.3.7或更高版本,则只需要在withCount方法中将关键字符串添加为new_name,并将计数字段命名为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();
此代码将生成enabled_users_count字段和phone_users_count字段.
如果你不是这个版本,并且无法升级,你将需要走定义新关系的路线,如@RossWilson所述.
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。