Vyloučení modelů pomocí metody except() v Laravel 12.22

Laravel 12.22 - přidává except() Metoda nástroje Eloquent Builder pro vyloučení modelů z dotazů Laravel 12.22 zavádí novou a expresivní metodu nazvanou except() v nástroji pro ses...

Poptat web

08. 08. 2025

Vyloučení modelů pomocí metody except() v Laravel 12.22

Laravel 12.22 - přidává except() Metoda nástroje Eloquent Builder pro vyloučení modelů z dotazů

Laravel 12.22 zavádí novou a expresivní metodu nazvanou except() v nástroji pro sestavování dotazů Eloquent. Tato metoda usnadňuje vyloučení konkrétních instancí modelů nebo kolekcí modelů z výsledků dotazů - pomáhá vám psát čistší a čitelnější kód.

Co dělá except() Dělat?

Na stránkách except() metoda umožňuje vyloučit jednu nebo více instancí modelu nebo kolekcí modelů. z dotazu. Interně využívá stávající whereKeyNot() extrakcí primárních klíčů ze zadaných modelů.

To znamená, že namísto ruční extrakce ID a volání whereKeyNot(), můžete nyní přímo předávat modely nebo kolekce do funkce except() pro vyloučení.

Proč neupravit whereKeyNot()?

whereKeyNot() byl původně navržen tak, aby vylučoval záznamy pouze podle jejich klíče nebo ID. Jeho úprava pro přímou práci s modely nebo kolekcemi by zkomplikovala jeho účel a mohla by přinést neočekávané vedlejší účinky pro stávající uživatele.

Nový except() metoda udržuje obavy v čistotě:

  • whereKeyNot() se nadále zaměřuje na klíče/ID.
  • except() poskytuje uživatelsky přívětivý a expresivní způsob vyloučení modelů.

Jak používat except()

Před verzí Laravel 12.22

Chcete-li vyloučit videa s ID 2 a 4, musíte:

$videos = \App\Models\Video::query()
->whereIn('id', [2, 4])
->get();
 
$otherVideosUsingWhereKeyNot = \App\Models\Video::query()
->whereKeyNot($videos->pluck('id'))
->get();

Zde ručně vyberete ID z kolekce a vyloučíte je.

Po vydání Laravel 12.22

Výše uvedené můžete zjednodušit předáním modelů přímo do příkazu except():

$videos = \App\Models\Video::query()
->whereIn('id', [2, 4])
->get();
 
$otherVideosUsingExcept = \App\Models\Video::query()
->except($videos)
->get();

Díky tomu budou vaše záměry jasnější a kód čistší.

Souhrn

Nový except() metoda v Laravelu 12.22 je malým doplňkem systému Eloquent, který zlepšuje čitelnost a vyjadřovací schopnosti při vylučování modelů z dotazů.

  • Předejte jednu nebo více instancí modelu nebo kolekcí, abyste je vyloučili.
  • Interně používá whereKeyNot() pro efektivní filtrování dotazů.
  • Udržuje whereKeyNot() soustředěný a nezměněný.
  • Nyní je k dispozici ve verzi Laravel 12.22 a novější.
  • Tato metoda byla přidána v žádosti o stažení #56442

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