Maison >développement back-end >tutoriel php >Personnalisation de la collection à Laravel en utilisant collecté par
Améliorer la fonctionnalité de collection éloquente avec l'attribut CollectedBy
de Laravel. Cet attribut offre une approche rationalisée pour personnaliser les collections pour des types de modèles spécifiques, favorisant un code plus propre et plus maintenable. Oubliez la suppression de la méthode newCollection()
; CollectedBy
fournit une solution déclarative au niveau de la classe.
Auparavant, les collections de modèles d'adaptation impliquaient de remplacer la méthode newCollection()
. Cette nouvelle méthode basée sur des attributs offre une solution supérieure au niveau de la classe.
use Illuminate\Database\Eloquent\Attributes\CollectedBy; #[CollectedBy(CustomCollection::class)] class YourModel extends Model { // Model implementation }
Considérons un catalogue de produits de commerce électronique:
// 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; } }
L'attribut CollectedBy
simplifie la personnalisation de la collection, ce qui entraîne des applications Laravel plus propres et plus lisibles.
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!