Heim >Backend-Entwicklung >PHP-Tutorial >Anpassung der Sammlung in Laravel mit gesammeltem By
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!