Laravel set an Automatic WHERE Clause

痞子三分冷 提交于 2020-01-06 08:16:12

问题


I use models that extend a generic_model, which in turn extends Eloquent (so that I have several crud methods I use already set to be inherited).

A lot of the tables I use invoke soft delete, which needs a WHERE clause of...

WHERE deleted = 0

Is there a way to make Laravel behave in such a way that this WHERE clause is automatically included in all queries and all queries to objects that are related to one another?

e.g.

pages where id = 5 and deleted = 0

and then...

images where page_id = 5 and deleted = 0

回答1:


if you're using laravel 3 this is what you needs

on your model

public function query()
{

    $query = parent::query();

    $query->where('deleted','=','0');

    return $query;
}

if you're using laravel 4 just change the method query for newQuery

public function newQuery()
{

    $query = parent::newQuery();

    $query->where('deleted','=','0');

    return $query;
}

reference




回答2:


In relationships you can add the where_clause in your return:

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

In your Model, you could add something like:

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

to use Page::active() instead of Page::all() (Or you can remove the ->get() from the function in the model, so you can still further modify your query (Page::active()->order_by('name'))



来源:https://stackoverflow.com/questions/14271812/laravel-set-an-automatic-where-clause

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!