Verbesserung der eloquenten Sammlungsfunktionalität mit Laravels CollectedBy
Attribut. Dieses Attribut bietet einen optimierten Ansatz zum Anpassen von Sammlungen für bestimmte Modelltypen und fördert sauberere, wartbarere Code. Vergessen Sie die newCollection()
-Methode zu überschreiben; CollectedBy
liefert eine deklarative Lösung auf Klassenebene.
Zu den Anpassungsmodellsammlungen beinhaltete die Vermittlung der newCollection()
-Methode. Diese neue attributbasierte Methode bietet eine überlegene Lösung auf Klassenebene.
use Illuminate\Database\Eloquent\Attributes\CollectedBy; #[CollectedBy(CustomCollection::class)] class YourModel extends Model { // Model implementation }
Betrachten Sie einen E-Commerce-Produktkatalog:
// Product Collection <?php namespace App\Collections; use Illuminate\Database\Eloquent\Collection; class ProductCollection extends Collection { public function inStock() { return $this->filter(fn($product) => $product->stock_count > 0); } public function onSale() { return $this->filter(fn($product) => $product->discount_percentage > 0); } public function byPriceRange($min, $max) { return $this->filter(function($product) use ($min, $max) { $price = $product->getEffectivePrice(); return $price >= $min && $price <= $max; }); } public function topRated() { return $this->filter(fn($product) => $product->average_rating >= 4) ->sortByDesc('average_rating'); } } //Product model namespace App\Models; use App\Collections\ProductCollection; use Illuminate\Database\Eloquent\Model; use Illuminate\Database\Eloquent\Attributes\CollectedBy; #[CollectedBy(ProductCollection::class)] class Product extends Model { public function getEffectivePrice() { return $this->discount_percentage > 0 ? $this->price * (1 - $this->discount_percentage / 100) : $this->price; } }
Das Attribut CollectedBy
vereinfacht die Anpassung der Sammlung und führt zu saubereren, lesbaren Laravel -Anwendungen.
Das obige ist der detaillierte Inhalt vonAnpassung der Sammlung in Laravel mit gesammeltem By. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!