Laravel установил автоматическое предложение WHERE

Я использую модели, которые расширяют generic_model, который, в свою очередь, расширяет Eloquent (так что у меня есть несколько примитивных методов, которые я уже использую для наследования).

Многие таблицы, которые я использую, вызывают мягкое удаление, для которого требуется предложение WHERE ...

WHERE deleted = 0

Есть ли способ заставить Laravel вести себя таким образом, чтобы это предложение WHERE автоматически включалось во все запросы и все запросы к объектам, которые связаны друг с другом?

e.g.

pages where id = 5 and deleted = 0

а потом...

images where page_id = 5 and deleted = 0

person jaget    schedule 11.01.2013    source источник


Ответы (2)


если вы используете 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;
}

справочник

person BlaShadow    schedule 16.06.2013
comment
Привет, newQuery не работает для Laravel 4, вы знаете, как это сделать в Laravel 4? - person edi9999; 08.08.2013
comment
Я переработал его для поддержки Laravel 4 - person AMIB; 20.11.2013

В отношениях вы можете добавить выражение where_clause в свой return:

 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'))

person Barryvdh    schedule 11.01.2013