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`
どうすれば修正できますか?
withTrashed
を追加するだけです:
_'query_filter'=> function($query) {
$query->withTrashed();
},
_
更新
その場合、おそらくorWhereNotNull()
呼び出しを追加するだけです:
_'query_filter'=> function($query) {
$query->orWhereNotNull('deleted_at');
},
_
Eloquentには(Laravel 4. * | 5. *)のメソッドがあります:
Model::whereNotNull('sent_at')
Laravel 3:
Model::where_not_null('sent_at')
削除されたレコード(Soft Deleted Record)を検索する場合は、Eloquent Model Queryを使用しないでください。
代わりに_Db::table query
_を使用します
例えば
以下を使用する代わりに:
$stu = Student::where('rollNum', '=', $rollNum . '-' . $nursery)->first();
使用する
$stu = DB::table('students')->where('rollNum', '=', $newRollNo)->first();