Laravel 多次使用的初始查询
Laravel init query for multiple usage
我的模型中有这个查询初始化:
$query = Mymodel::where('is_active', 1);
我用它来得到不同的结果:
$result1 = $query->where('stat', null)->count();
$result2 = $query->where('stat', '!=', null)->count();
我的数据库中有 4 行,其中 2 行统计为空,另外 2 行不为空;所以我希望 $result1 和 $result2 的值是 2;但我知道 $result1 是 2 而 $result2 是 0;
好像 $result2 查询有 2 个条件 null 和 not null;
你不能像那样使用相同的查询。 where
子句将修改原始 $query
对象,因此您的计数会有点偏差。
您应该克隆原件,或将其定义为范围:
clone
方法:
$baseQuery = Mymodel::where('is_active', 1);
$result1 = (clone $baseQuery)->whereNull('stat')->count();
$result2 = (clone $baseQuery)->whereNotNull('stat')->count();
scope
方法:
Mymodel.php
:
public function scopeActive($query) {
return $query->where('is_active', 1);
}
然后在你的代码中:
$result1 = Mymodel::active()->whereNull('stat')->count();
$result2 = Mymodel::active()->whereNotNull('stat')->count();
我的模型中有这个查询初始化:
$query = Mymodel::where('is_active', 1);
我用它来得到不同的结果:
$result1 = $query->where('stat', null)->count();
$result2 = $query->where('stat', '!=', null)->count();
我的数据库中有 4 行,其中 2 行统计为空,另外 2 行不为空;所以我希望 $result1 和 $result2 的值是 2;但我知道 $result1 是 2 而 $result2 是 0;
好像 $result2 查询有 2 个条件 null 和 not null;
你不能像那样使用相同的查询。 where
子句将修改原始 $query
对象,因此您的计数会有点偏差。
您应该克隆原件,或将其定义为范围:
clone
方法:
$baseQuery = Mymodel::where('is_active', 1);
$result1 = (clone $baseQuery)->whereNull('stat')->count();
$result2 = (clone $baseQuery)->whereNotNull('stat')->count();
scope
方法:
Mymodel.php
:
public function scopeActive($query) {
return $query->where('is_active', 1);
}
然后在你的代码中:
$result1 = Mymodel::active()->whereNull('stat')->count();
$result2 = Mymodel::active()->whereNotNull('stat')->count();