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

Anpassung der Sammlung in Laravel mit gesammeltem By

Emily Anne Brown
Emily Anne BrownOriginal
2025-03-06 02:17:09480Durchsuche

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
}

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!

Stellungnahme:
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