Laravel 12.29: Zakázat všechny globální obory kromě vybraných

Novinky ve verzi Laravel 12.29: withoutGlobalScopesExcept() Laravel 12.29 přináší novou praktickou metodu Eloquent: withoutGlobalScopesExcept(). To umožňuje zakázat všechny globál...

Poptat web

18. 09. 2025

Laravel 12.29: Zakázat všechny globální obory kromě vybraných

Novinky ve verzi Laravel 12.29: withoutGlobalScopesExcept()

Laravel 12.29 přináší novou praktickou metodu Eloquent: withoutGlobalScopesExcept(). To umožňuje zakázat všechny globální obory dotazu kromě těch, které chcete výslovně zachovat.

Co to dělá

Dříve jste mohli:

  • Použijte withoutGlobalScope() odebrat jeden obor.
  • Použijte withoutGlobalScopes() odebrat všechny nebo několik oborů.

Nyní s:

Post::withoutGlobalScopesExcept(['tenant'])->get();

Odeberete všechny globální obory kromě tenant.

Příklad

class Post extends Model
{
protected static function booted()
{
static::addGlobalScope('published', fn ($q) => $q->where('published', true));
static::addGlobalScope('tenant', fn ($q) => $q->where('tenant_id', auth()->id()));
}
}
 
// Only keep the tenant scope:
$posts = Post::withoutGlobalScopesExcept(['tenant'])->get();

Proč je to důležité

Díky této funkci jsou dotazy výstižnější a stručnější. Místo ručního zakazování více rozsahů nebo opětovného přidávání podmínek můžete na bílou listinu zařadit jen ty, které potřebujete.

Podrobnosti naleznete v části PR #56957.

Původní článek publikoval Nabil Hassen.