La risposta è stata data quando non c'era ambito della query funzionalità disponibile.
Puoi sovrascrivere la query principale, solo per il Post
modello, come
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;
}
}
Ora, usa semplicemente qualsiasi cosa, ma gli utenti non approvati non appariranno nel risultato.
$approvedPosts = Post::where('title', 'like', '%Hello%');
Ora, se hai bisogno di recuperare tutti i post anche quelli non approvati, puoi usare
$approvedPosts = Post::allowUnapprovedPosts()->where('title', 'like', '%Hello%');
Aggiorna (usando l'ambito della query):
Poiché, Laravel ora fornisce Ambiti di query globali , sfrutta che invece di questa soluzione hacky, nota la data di questa risposta, è troppo vecchia e molte cose sono cambiate ormai.
// Using a local query scope
class Post extends Eloquent
{
public function scopeApproved($query)
{
return $query->where('approved', 1);
}
}
Puoi usarlo come:
$approvedPosts = Post::approved()->get();