答えは、クエリスコープ がなかったときに与えられました。 利用可能な機能。
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;
}
}
これで、何でも使用できますが、未承認のユーザーは結果に表示されません。
$approvedPosts = Post::where('title', 'like', '%Hello%');
これで、未承認の投稿も含めてすべての投稿を取得する必要がある場合は、
を使用できます。$approvedPosts = Post::allowUnapprovedPosts()->where('title', 'like', '%Hello%');
更新(クエリスコープを使用):
それ以来、Laravelはグローバルクエリスコープ を提供するようになりました 、このハッキーなソリューションの代わりに、この回答の日付に注意してください。古すぎて、今では多くのことが変更されています。
// Using a local query scope
class Post extends Eloquent
{
public function scopeApproved($query)
{
return $query->where('approved', 1);
}
}
次のように使用できます:
$approvedPosts = Post::approved()->get();