Я использую пакет Laravel Administrator от frozennode. Короче говоря, я сталкиваюсь с проблемами при отображении результатов, которые были удалены. Я пытаюсь переопределить запрос по умолчанию:
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`
К сожалению, я не знаю, как использовать orWhere () с ‘is not null’. После небольшого исследования я попробовал это с необработанным блоком SQL, как это:
'query_filter'=> function($query) {
$query->orWhere(DB::raw('`scripts`.`deleted_at` is not null'));
},
Но в итоге я получил дополнительный фрагмент SQL, в результате чего второй параметр не был включен в orWhere ():
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');
},
Если вы хотите найти удаленную запись (Soft Deleted Record), не используйте Eloquent Model Query.
Вместо этого используйте Db::table query
например
Вместо использования ниже:
$stu = Student::where('rollNum', '=', $rollNum . '-' . $nursery)->first();
использование
$stu = DB::table('students')->where('rollNum', '=', $newRollNo)->first();
Eloquent имеет метод для (Laravel 4. * | 5. *):
Model::whereNotNull('sent_at')
Ларавелла 3:
Model::where_not_null('sent_at')
Это может быть актуально:
return $this->join($table, $first, $operator, $second, 'right');
(от GitHub).