Вход Регистрация
Файл: vendor/laravel/framework/src/Illuminate/Database/Eloquent/HasCollection.php
Строк: 65
<?php

namespace IlluminateDatabaseEloquent;

use 
IlluminateDatabaseEloquentAttributesCollectedBy;
use 
ReflectionClass;

/**
 * @template TCollection of IlluminateDatabaseEloquentCollection
 */
trait HasCollection
{
    
/**
     * The resolved collection class names by model.
     *
     * @var array<class-string<static>, class-string<TCollection>>
     */
    
protected static array $resolvedCollectionClasses = [];

    
/**
     * Create a new Eloquent Collection instance.
     *
     * @param  array<array-key, IlluminateDatabaseEloquentModel>  $models
     * @return TCollection
     */
    
public function newCollection(array $models = [])
    {
        static::
$resolvedCollectionClasses[static::class] ??= ($this->resolveCollectionFromAttribute() ?? static::$collectionClass);

        
$collection = new static::$resolvedCollectionClasses[static::class]($models);

        if (
Model::isAutomaticallyEagerLoadingRelationships()) {
            
$collection->withRelationshipAutoloading();
        }

        return 
$collection;
    }

    
/**
     * Resolve the collection class name from the CollectedBy attribute.
     *
     * @return class-string<TCollection>|null
     */
    
public function resolveCollectionFromAttribute()
    {
        
$reflection = new ReflectionClass(static::class);

        do {
            
$attributes $reflection->getAttributes(CollectedBy::class);

            if (isset(
$attributes[0], $attributes[0]->getArguments()[0])) {
                return 
$attributes[0]->getArguments()[0];
            }
        } while (
$reflection $reflection->getParentClass());

        return 
null;
    }
}
Онлайн: 1
Реклама