【问题标题】:Laravel set an Automatic WHERE ClauseLaravel 设置了一个自动 WHERE 子句
【发布时间】:2013-01-11 04:43:27
【问题描述】:

我使用扩展了 generic_model 的模型,而后者又扩展了 Eloquent(所以我有几个我使用的 crud 方法已经设置为被继承)。

我使用的很多表都会调用软删除,这需要一个 WHERE 子句...

WHERE deleted = 0

有没有办法让 Laravel 的行为方式使得这个 WHERE 子句自动包含在所有查询中以及对彼此相关的对象的所有查询中?

例如

pages where id = 5 and deleted = 0

然后……

images where page_id = 5 and deleted = 0

【问题讨论】:

    标签: php where laravel eloquent


    【解决方案1】:

    如果您使用的是 laravel 3,这就是您所需要的

    在你的模型上

    public function query()
    {
    
        $query = parent::query();
    
        $query->where('deleted','=','0');
    
        return $query;
    }
    

    如果您使用的是 laravel 4,只需更改 newQuery

    的方法查询
    public function newQuery()
    {
    
        $query = parent::newQuery();
    
        $query->where('deleted','=','0');
    
        return $query;
    }
    

    reference

    【讨论】:

    • 嗨,newQuery 不适用于 Laravel 4,你知道如何在 Laravel 4 中做到这一点吗?
    • 我已经修改它以支持 Laravel 4
    【解决方案2】:

    在关系中,您可以在退货中添加 where_clause:

     public function pages()
    {
        return $this->has_many('Page')->where_deleted(0);
    }
    

    在您的模型中,您可以添加如下内容:

    public static function active()
    {
        return self::where_delete(0)->get();
    }
    

    使用Page::active() 而不是Page::all() (或者您可以从模型中的函数中删除->get(),这样您仍然可以进一步修改您的查询(Page::active()->order_by('name')

    【讨论】:

      猜你喜欢
      • 2016-12-28
      • 1970-01-01
      • 2020-09-28
      • 2018-09-05
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-11-28
      相关资源
      最近更新 更多