The*_*pha 17
您可以覆盖主查询,仅适用于Post模型,例如
class Post extends Eloquent
{
protected static $_allowUnapprovedPosts = false;
public function newQuery()
{
$query = parent::newQuery();
if(! static::$_allowUnapprovedPosts)
{
$query->where('approved', '=', 1);
}
else{
static::$_allowUnapprovedPosts = false;
}
return $query;
}
// call this if you need unapproved posts as well
public static function allowUnapprovedPosts()
{
static::$_allowUnapprovedPosts = true;
return new static;
}
}
Run Code Online (Sandbox Code Playgroud)
现在,只需使用任何内容,但未经批准的用户将不会出现在结果中.
$approvedPosts = Post::where('title', 'like', '%Hello%');
Run Code Online (Sandbox Code Playgroud)
现在,如果您需要检索所有帖子甚至未经批准的帖子,那么您可以使用
$approvedPosts = Post::allowUnapprovedPosts()->where('title', 'like', '%Hello%');
Run Code Online (Sandbox Code Playgroud)
因为,Laravel现在提供全局查询范围,利用它而不是这个hacky解决方案,注意这个答案的日期,它太旧了,现在改变了很多东西.
我找到的最接近的是Eloquent查询范围.
即使它需要对我的代码进行微小的更改(为查询添加前缀),它仍然能够以极大的灵活性为我提供所需的内容.
这是一个例子:
在Eloquent子类中创建一个函数:
class Post extends Eloquent {
public function scopeApproved($query)
{
return $query->where('approved', '=', 1/*true*/);
}
}
Run Code Online (Sandbox Code Playgroud)
然后简单地使用它:
$approvedPosts = Post::approved()-><whatever_queries_you_have_here>;
Run Code Online (Sandbox Code Playgroud)
完美的工作.没有丑陋的重复WHERE函数调用.易于修改.更容易阅读(approved()比更有意义where('approved', '=', 1))
| 归档时间: |
|
| 查看次数: |
6120 次 |
| 最近记录: |