从其他表计数

时间:2016-11-04 14:56:53

标签: php laravel eloquent laravel-collection

我在计算guid不为空的设备数量时遇到问题。

需要按用户user_id获取所有商店,然后计算guid不为空的所有设备。

$shops = Shop::with('devices')->where('user_id', $userId)->get();

$deviceActive = $shops->reduce(function ($carry, $item) {
     return $carry + $item->devices->whereNotNull('guid')->count();
});

dd($deviceActive );

当我这样做时,它会起作用:

return $carry + $item->devices->count();

但需要计算guid不为空的位置。

我也很想知道是否有其他reduce方法。

2 个答案:

答案 0 :(得分:1)

由于$item->devices是一个集合,因此集合没有whereNotNull()。因此,请尝试使用where()

$item->devices->where('guid', '<>', null)->count();

答案 1 :(得分:0)

尝试:

$shops = Shop::with('devices')
->where('user_id', $userId)
->where('guid', '!=', null)->get();

$get_count = count($shops); // it return how many values have $shops

OR

$shops= DB::table('devices')->where('user_id', $userId)
    ->where('guid', '!=', null)->get();

$get_count = count($shops);

如果您没有在控制器上添加类DB:

use DB;