web-dev-qa-db-ja.com

Eloquentを使って、「nullでない場合」をどのように確認しますか?

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
177
Marwelln

Eloquentにはそのための方法があります(Laravel 4。*/5. *)。

Model::whereNotNull('sent_at')

階級3:

Model::where_not_null('sent_at')
332
Bas de Groot

私のような人が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', '<>', '');
}
17
Atiqur

DBファサード を使いたい場合は、

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

6
Jon

使える

Model::whereNotNull('sent_at');

または

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

私はこの質問が少し古いのを見ますが、私は答えを探してそれを見つけました。私はここで答えに成功しませんでしたが、私はこれが私が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を返すことができます。

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

laravel 5.4では、このコードModel :: whereNotNull( 'column')が機能していなかったので、このようにget()を追加する必要があります。Model :: whereNotNull( 'column') - > get();これは私のためにうまくいきます:)