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();