Laravel Eloquent OR WHERE IS NOT NULL

2022-08-31 00:46:00

我正在使用来自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`

不幸的是,我不知道如何使用 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`

我该如何解决这个问题?


答案 1

只需添加 :withTrashed

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

更新

在这种情况下,您可能只需添加一个调用:orWhereNotNull()

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

答案 2

Eloquent有一种方法(Laravel 4.* |5.*):

Model::whereNotNull('sent_at')

拉拉维尔3:Model::where_not_null('sent_at')


推荐