我的模型中有一个初始查询:

$query = Mymodel::where('is_active', 1);

我用它来得到不同的结果:

$result1 = $query->where('stat', null)->count();
$result2 = $query->where('stat', '!=', null)->count();

我的数据库中有4行,其中2行stat null,2行not null;所以我预计$result1和$result2的值是2;但我得到$result1是2,$result2是0;

就好像$result2查询有两个条件:null和notnull;

推荐答案

你不能像那样使用同一个查询.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();

Laravel相关问答推荐

将 ID 传递给资源控制器进行编辑

根据路径的开头重定向

Laravel init 查询多种用途

如何在 Laravel 的外部 js 文件中包含 csrf_token()?

Laravel/Eloquent:致命错误:在非对象上调用成员函数 connection()

Laravel 5.4 - 如何为同一个自定义验证规则使用多个错误消息

Carbon(laravel)处理无效日期

判断 Laravel 模型表中是否存在列,然后应用条件

Laravel 的 APP_ENV 变量(在 .env 文件中找到)是否有建议的值列表?

laravel:如何在 Eloquent Query 中使用 LOWERCASE 函数?

Laravel 生产问题 - 使用 Laravel 4.1.x 更新composer

在 laravel 分页中添加一些数据

Eloquent ORM,deleted_at 使用软删除时没有索引

如何利用 StorageFacade 的 Filesystem 类的 glob 方法?

Composer 致命错误:声明 Fxp... 必须与第 334 行的 ...AbstractAssetsRepository.php 兼容

安装后在 Lumen 中找不到页面

在 laravel 的测试套件中只运行一个单元测试

Laravel 5 默认注册后如何发送邮件?

如何使用 Laravel 迁移在 Mysql 列中添加注释

如何在没有日志(log)、没有信息的情况下调试 Laravel 错误 500