Novinka v Laravel 12.7: `whereAttachedTo()` pro vztahy BelongsToMany

whereAttachedTo() pro vztahy BelongsToMany Laravel zavedl novou metodu sestavování dotazů, whereAttachedTo(), přispěl @bakerkretzmar, což zjednodušuje dotazování BelongsToMany vzt...

Poptat web

08. 04. 2025

Novinka v Laravel 12.7: `whereAttachedTo()` pro vztahy BelongsToMany

whereAttachedTo() pro vztahy BelongsToMany

Laravel zavedl novou metodu sestavování dotazů, whereAttachedTo(), přispěl @bakerkretzmar, což zjednodušuje dotazování BelongsToMany vztahy. Tato funkce, která byla do frameworku začleněna 2. dubna 2025, přináší výraznější a pohodlnější způsob filtrování modelů na základě jejich příloh k otočným tabulkám.

Problém

Při práci se vztahy mnoho-více v aplikaci Eloquent potřebují vývojáři často filtrovat modely, které jsou připojeny k dané instanci nebo kolekci instancí. To dříve vyžadovalo ruční použití whereHas or whereIn logiku s vnořenými dotazy na vztahy, které by mohly být mnohomluvné a méně čitelné.

Řešení: whereAttachedTo()

Nový whereAttachedTo() poskytuje čistou a výraznou alternativu. Inspirováno stávajícími whereBelongsTo() umožňuje vývojářům vyhledat modely, které jsou připojeny k danému modelu nebo sadě modelů prostřednictvím metody. BelongsToMany vztah.

Příklady

Před:

$tags = Tag::where('created_at', '>', now()->subMonth())->get();
 
$taggedPosts = Post::whereHas('tags', function ($query) use ($tags) {
$query->whereKey($tags);
})->get();

Po:

$tags = Tag::where('created_at', '>', now()->subMonth())->get();
 
$taggedPosts = Post::whereAttachedTo($tags)->get();

Stejně jako funkce whereBelongsTo() i funkce whereAttachedTo() odhaduje název vztahu na základě konvencí Laravel, ale lze jej zadat i ručně:

$taggedPosts = Post::whereAttachedTo($tags, 'tags')->get();

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