Eloquentを使ってフィールドが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
Eloquentにはそのための方法があります(Laravel 4。*/5. *)。
Model::whereNotNull('sent_at')
階級3:
Model::where_not_null('sent_at')
私のような人が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
またはモデル内のスコープ付き:
public function scopeNotNullOnly($query){
return $query->where('status_message', '<>', '');
}
DBファサード を使いたい場合は、
DB::table('table_name')->whereNotNull('sent_at')->get();
使える
Model::whereNotNull('sent_at');
または
Model::whereRaw('sent_at is not null');
私はこの質問が少し古いのを見ますが、私は答えを探してそれを見つけました。私はここで答えに成功しませんでしたが、私はこれが私がPHP 7.2とをオンにしているためかもしれないと思いますLaravel 5.7。またはLaravel Tinkerを使用してCLIでデータをいくつか試してみただけなので可能です。
私が試してみたことが私や他の人のためになることを望んでいなかったことに対してうまくいったことがあります。
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()
をドロップして、必要に応じて配列の代わりにIlluminate\Database\Eloquent\Collectionを返すことができます。
$searchResultQuery = Users::query();
$searchResultQuery->where('status_message', '<>', '', 'and'); // is not null
$searchResultQuery->where('is_deleted', 'IS NULL', null, 'and'); // is null
laravel 5.4では、このコードModel :: whereNotNull( 'column')が機能していなかったので、このようにget()を追加する必要があります。Model :: whereNotNull( 'column') - > get();これは私のためにうまくいきます:)