laravel DB :: raw count data,即使为null

时间:2018-04-05 06:58:24

标签: php laravel charts

我有这个问题:

$providercounter = DB::table('users')
            ->select(DB::raw('count(provider) as count'),'users.provider')
            ->groupBy('provider')
            ->orderBy('count','desc')
            ->get();
    foreach($providercounter as $provider){
      $name[] = $provider->provider;
      $count[] = $provider->count;
    }
    $providerUsers = Charts::create('bar', 'highcharts')
       ->title('Providers users')
       ->labels($name)
       ->values($count)
       ->responsive(true);

这会在图表中检索我的用户provider列并计算它们。

ISSUE

如果我的用户是通过其社交网络帐户(例如facebook, google etc.)注册的,则会获得数据,但如果我的用户是通过我的网站上的电子邮件地址注册的(因为他们的provider列是null)它不会检索和计算

问题

如何将我们提供的列为空的用户数据包含在内?

2 个答案:

答案 0 :(得分:1)

使用IFNULL

$providercounter = DB::table('users')
        ->select(DB::raw('count(provider) as count'),'users.provider')
        ->groupBy(DB::Raw('IFNULL( users.provider , 0 )'))
        ->orderBy('count','desc')
        ->get();

或将提供者字段设置为默认值0 并将零视为没有提供者的用户

答案 1 :(得分:0)

您必须将主查询更改为:

如果您想 provider = null ,请使用此

$providercounter = DB::table('users')
        ->select(DB::raw('count(provider) as count'),'users.provider')
        ->whereNull('provider')
        ->groupBy('provider')
        ->orderBy('count','desc')
        ->get();

或者如果您想 provider != null ,请使用此

$providercounter = DB::table('users')
        ->select(DB::raw('count(provider) as count'),'users.provider')
        ->whereNotNull('provider')
        ->groupBy('provider')
        ->orderBy('count','desc')
        ->get();