繁体   English   中英

Laravel Eloquent或者哪里不是空的

[英]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`

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

如果要搜索已删除的记录(软删除记录),请不要使用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')

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

这可能是相关的:

return $this->join($table, $first, $operator, $second, 'right');

(来自GitHub)

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM