Heim > Backend-Entwicklung > PHP-Tutorial > Anpassung der Sammlung in Laravel mit gesammeltem By

Anpassung der Sammlung in Laravel mit gesammeltem By

Emily Anne Brown
Freigeben: 2025-03-06 02:17:09
Original
475 Leute haben es durchsucht

Collection Customization in Laravel Using CollectedBy

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
}
Nach dem Login kopieren

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;
    }
}
Nach dem Login kopieren

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!

Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn
Neueste Artikel des Autors
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage