php – 如何重命名从Laravel的Query Builder withCount(又名$asColumn)返回的字段

我有一个模型,我试图链接多个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所述.

相关文章

统一支付是JSAPI/NATIVE/APP各种支付场景下生成支付订单,返...
统一支付是JSAPI/NATIVE/APP各种支付场景下生成支付订单,返...
前言 之前做了微信登录,所以总结一下微信授权登录并获取用户...
FastAdmin是我第一个接触的后台管理系统框架。FastAdmin是一...
之前公司需要一个内部的通讯软件,就叫我做一个。通讯软件嘛...
统一支付是JSAPI/NATIVE/APP各种支付场景下生成支付订单,返...