可以进行一次查询以获得总额,销售额和数量。在laravel雄辩中未售出?
$total_apple = Item::whereName('Apple')->count();
$sold_apple = Item::whereName('Apple')->whereStatus(2)->count();
$unsold_apple = Item::whereName('Apple')->whereStatus(1)->count();
答案 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
由于您只是在进行简单计数,因此您也可以使用查询构建器。