web-dev-qa-db-ja.com

Laravel Eloquent OR WHERE IS NOT NULL

FrozennodeのLaravel Administratorパッケージを使用しています。簡単に言えば、ソフト削除された結果を表示するときに問題が発生しています。デフォルトのクエリをオーバーライドしようとしています。

select * from `scripts` where `scripts`.`deleted_at` is null group by `scripts`.`id`

削除された結果と削除されていない結果の両方を表示するには、何らかの方法でハッキングします。これは最もエレガントなソリューションではありませんが、他の方法は見当たりません。したがって、私の目標はこれを行うことです。

select * from `scripts` where `scripts`.`deleted_at` is null or `scripts`.`deleted_at` is not null group by `scripts`.`id`

残念ながら、「is not null」でorWhere()を使用する方法がわかりません。少し調べた後、次のように生のSQLブロックで試しました。

'query_filter'=> function($query) {
    $query->orWhere(DB::raw('`scripts`.`deleted_at` is not null'));
},

しかし、orWhere()に2番目のパラメーターが含まれていないため、余分なSQLが作成されました。

select * from `scripts` where `scripts`.`deleted_at` is null or `scripts`.`deleted_at` is not null **is null** group by `scripts`.`id`

どうすれば修正できますか?

13
Anonymous

withTrashedを追加するだけです:

_'query_filter'=> function($query) {
    $query->withTrashed();
},
_

ソース

更新

その場合、おそらくorWhereNotNull()呼び出しを追加するだけです:

_'query_filter'=> function($query) {
    $query->orWhereNotNull('deleted_at');
},
_
26
Jeff Lambert

Eloquentには(Laravel 4. * | 5. *)のメソッドがあります:

Model::whereNotNull('sent_at')

Laravel 3:Model::where_not_null('sent_at')

0
Matthew Farrell

削除されたレコード(Soft Deleted Record)を検索する場合は、Eloquent Model Queryを使用しないでください。
代わりに_Db::table query_を使用します
例えば
以下を使用する代わりに:

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

使用する

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

0
user4397894