Reputation: 2229
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
Upvotes: 0
Views: 2490
Reputation: 11693
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;
}
Upvotes: 7
Reputation: 6579
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')
)
Upvotes: 1