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();