所以,我的一张桌子上有一个'is_abandoned'
布尔值,如果它是true
,我希望模型能够自动从任何查询中排除 - 只是像softDeletes一样。
我可以在模型中设置一些能实现这一目标的东西吗?我倾向于可能是一个变异者?
答案 0 :(得分:1)
这些称为Global Query Scopes。
编写全局范围很简单。定义实现
SELECT * FROM joke LEFT JOIN jokevote ON joke.user_id=jokevote.user_id WHERE jokevote.vote=?
接口的类。此界面要求您实现一种方法:Illuminate\Database\Eloquent\Scope
。apply
方法可以根据需要向查询添加apply
个约束:
where
要为模型分配全局范围,您应该覆盖给定模型的
<?php namespace App\Scopes; use Illuminate\Database\Eloquent\Scope; use Illuminate\Database\Eloquent\Model; use Illuminate\Database\Eloquent\Builder; class AgeScope implements Scope { /** * Apply the scope to a given Eloquent query builder. * * @param \Illuminate\Database\Eloquent\Builder $builder * @param \Illuminate\Database\Eloquent\Model $model * @return void */ public function apply(Builder $builder, Model $model) { $builder->where('age', '>', 200); } }
方法并使用boot
方法:
addGlobalScope
答案 1 :(得分:0)
你可以使用eloquent where function
来排除记录$lists = List::where('is_abandoned',false);
答案 2 :(得分:0)
以下是一个例子:
在Eloquent
class User extends Eloquent {
public function scopeAbandoned($query)
{
return $query->where('is_abandoned', '=', 1/*true*/);
}
}
然后简单地使用它:
$approvedPosts = Post::abandoned()-><put_your_own_condition>;
详细信息请阅读Eloquent Query Scopes。 没有重复的WHERE函数调用。希望它有效。