雄辩以不同的身份来统计

时间:2015-11-26 12:38:50

标签: laravel eloquent

可以进行一次查询以获得总额,销售额和数量。在laravel雄辩中未售出?

$total_apple  = Item::whereName('Apple')->count();
$sold_apple   = Item::whereName('Apple')->whereStatus(2)->count();
$unsold_apple = Item::whereName('Apple')->whereStatus(1)->count();

3 个答案:

答案 0 :(得分:2)

是的,你完全可以做到这一点。您可以对Eloquent查询返回的集合对象使用filter方法。

$apples = Item::whereName('Apple')->get();

$soldApples = $apples->filter(function ($apple){
     return $apple->status == 2;
});

$unsoldApples = $apples->filter(function ($apple){
     return $apple->status == 1;
});

$ soldApples和$ unsoldApples包含项目的对象。然后,您可以使用count($ soldApples)和count($ unsoldApples)来计算它们。

filter方法针对集合对象,因此没有sql开销。

答案 1 :(得分:1)

我会在一个集合中获取所有项目,然后在该集合上运行where语句。这应该触发一个查询。

$apples       = Item::whereName('Apple')->get();  // This goes against SQL
$total_apple  = $apples->count();          //This runs on the Collection object not SQL
$sold_apple   = $apples->whereStatus(2)->count();
$unsold_apple = $apples->whereStatus(1)->count();

答案 2 :(得分:1)

无需运行多个查询,甚至无需获取整个结果并使用集合方法进行循环。只需使用原始查询。

$apples = Item::whereName('Apple')
              ->selectRaw('COUNT(*) as total_apples,
                           SUM(status=2) as sold_apples,
                           SUM(status=1) as unsold_apples')
              ->first();

echo $apples->total_apples;     // Outputs total apples
echo $apples->unsold_apples;    // Outputs the unsold apples
echo $apples->sold_apples;      // Outputs the sold apples

由于您只是在进行简单计数,因此您也可以使用查询构建器。