【问题标题】:Laravel Eloquent OR WHERE IS NOT NULLLaravel Eloquent OR WHERE IS NOT NULL
【发布时间】:2014-12-08 07:07:45
【问题描述】:

我正在使用来自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() 与“不为空”一起使用。经过一番研究,我尝试了一个原始的 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`

我该如何解决这个问题?

【问题讨论】:

    标签: php sql laravel eloquent administrator


    【解决方案1】:

    只需添加withTrashed:

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

    Source

    更新

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

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

    【讨论】:

    • 不幸的是,这不起作用。我收到对未定义方法 Illuminate\Database\Query\Builder::withTrashed() 错误的调用。
    【解决方案2】:

    如果要搜索已删除记录(Soft Deleted Record),请不要使用 Eloquent Model Query。
    而是使用Db::table query
    例如
    而不是使用下面:

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

    使用

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

    【讨论】:

      【解决方案3】:

      Eloquent 有一个用于 (Laravel 4.* | 5.*) 的方法:

      Model::whereNotNull('sent_at')

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

      【讨论】:

        【解决方案4】:

        这可能是相关的:

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

        (来自GitHub)。

        【讨论】:

          猜你喜欢
          • 2017-08-30
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2013-06-04
          • 2014-06-13
          相关资源
          最近更新 更多