我试图为我拥有的一个表实现一个"approved"状态,基本上,如果行的approve列等于1,这非常简单;应该检索该行,否则就不应该检索该行.
问题是,现在我必须遍历整个代码库,添加一个WHERE语句(即函数调用),这不仅耗时,而且效率低下(如果我想删除该功能,等等)
我该怎么做?它是否像在Eloquent 的子类构造函数中添加$this->where(..)
一样简单?这不会影响其他CRUD操作吗?例如不更新未批准的行?
我试图为我拥有的一个表实现一个"approved"状态,基本上,如果行的approve列等于1,这非常简单;应该检索该行,否则就不应该检索该行.
问题是,现在我必须遍历整个代码库,添加一个WHERE语句(即函数调用),这不仅耗时,而且效率低下(如果我想删除该功能,等等)
我该怎么做?它是否像在Eloquent 的子类构造函数中添加$this->where(..)
一样简单?这不会影响其他CRUD操作吗?例如不更新未批准的行?
我找到的最接近的东西是Eloquent query scope.
尽管它需要对我的代码(前缀查询)进行微小的更改,但它仍然以极大的灵活性为我提供了所需的内容.
下面是一个例子:
在Elount子类中创建一个函数:
class Post extends Eloquent {
public function scopeApproved($query)
{
return $query->where('approved', '=', 1/*true*/);
}
}
然后像这样简单地使用它:
$approvedPosts = Post::approved()-><whatever_queries_you_have_here>;
效果很好.没有函数调用的地方.易于修改.更容易阅读(approved()
比where('approved', '=', 1)
更有意义)