你如何检查“如果不是null”;有说服力的?

你如何检查一个字段不是空的与雄辩?

我尝试了Model::where('sent_at', 'IS NOT', DB::raw('null'))->...,但它给出了IS NOT作为绑定而不是比较。

这是DB::getQueryLog()对它的解释:

  'query' => string 'select * from my_table where sent_at = ? and profile_id in (?, ?) order by created_at desc' (length=101)
'bindings' =>
array (size=3)
0 => string 'IS NOT' (length=6)
1 => int 1
2 => int 4
482202 次浏览

Eloquent对此有一个方法(Laravel 4.*/5.*);

Model::whereNotNull('sent_at')

Laravel 3:

Model::where_not_null('sent_at')

如果你想搜索已删除的记录(软删除记录),不要使用雄辩模型查询。

请使用Db::table查询。例如:

而不是:

$stu = Student::where('rollNum', '=', $rollNum . '-' . $nursery)->first();

使用:

$stu = DB::table('students')->where('rollNum', '=', $newRollNo)->first();

如果像我这样的人想用Laravel 5.2.23中的查询生成器来做,可以像->这样做

 $searchResultQuery = Users::query();
$searchResultQuery->where('status_message', '<>', '', 'and'); // is not null
$searchResultQuery->where('is_deleted', 'IS NULL', null, 'and'); // is null

或与scope in model:

public function scopeNotNullOnly($query){


return $query->where('status_message', '<>', '');
}

laravel 5.4中,这个代码Model::whereNotNull('column')不起作用,你需要添加get(),就像这个Model::whereNotNull('column')->get();,这个对我来说很好。

如果你想使用DB外观:

DB::table('table_name')->whereNotNull('sent_at')->get();

我们可以用

Model::whereNotNull('sent_at');

Model::whereRaw('sent_at is not null');

我知道这个问题有点老了,但我在寻找答案时偶然发现了它。虽然我在这里没有成功的答案,但我认为这可能是因为我在PHP 7.2Laravel 5.7。上,或者可能是因为我只是在CLI上使用Laravel Tinker摆弄一些数据。

我尝试过一些对我有用的方法,也尝试过一些对我没用的方法,我希望这些方法能帮助到其他人。
I did not have success running:

    MyModel::whereNotNull('deleted_by')->get()->all();             // []
MyModel::where('deleted_by', '<>', null)->get()->all();        // []
MyModel::where('deleted_by', '!=', null)->get()->all();        // []
MyModel::where('deleted_by', '<>', '', 'and')->get()->all();   // []
MyModel::where('deleted_by', '<>', null, 'and')->get()->all(); // []
MyModel::where('deleted_by', 'IS NOT', null)->get()->all();    // []

以上所有为我返回一个空数组


然而,我确实成功地运行:

    DB::table('my_models')->whereNotNull('deleted_by')->get()->all(); // [ ... ]

这将像我预期的那样在数组中返回所有结果。注意:如果你愿意,你可以删除all()并返回照亮\雄辩的\ \数据库集合而不是数组。

您也可以使用原始查询。

记住:报告是我的模型,我使用原始的地方,原始查询的最好的事情是,你可以使用多种类型的操作符,如and,或等,只是作为一个字符串传递。

例如:WHERE condition1 AND condition2 AND condition3…;


Reports::whereRaw("column1 IS NOT NULL AND column2 IS NOT NULL");

上面的查询将以如下方式执行:

从列不为空和列2不为空的报告中选择*。

要进一步了解为空IS非空操作符:

https://www.w3schools.com/sql/sql_and_or.asp

你可以简单地这样做:

Model::whereNotNull('sent_at')->get();