Laravel: collect() helper - установить тип коллекции

Если я сделаю это:

$obj = factory(Object::class)->make();

collect($obj);

Мне возвращается коллекция типа:

Illuminate\Support\Collection

Laravel также позволяет вам определять свои собственные коллекции с их конкретными методами. В модели вы делаете:

public function newCollection(array $models = [])
{
    return new CustomCollection($models);
}

и вы бы сделали свою CustomCollection, начиная с этого, в файле CustomCollection:

class CustomCollection extends Collection
{

Мне интересно, как я могу вернуть коллекцию типа:

Illuminate\Database\Eloquent\Collection

или, в случае создания моей собственной пользовательской коллекции, как я могу вернуть коллекцию типа:

App\Models\CustomCollection

Я хотел бы сделать это с помощью помощника collect() или любым другим способом, когда я не обращаюсь к базе данных в целях написания тестов PHPUnit.

==========

РЕДАКТИРОВАТЬ: я использую фабрику (Object::class)->make(), чтобы подделать Eloquent объекты, которые я пытался свернуть в коллекции.

Если вы просто выполняете factory(Object::class, 1)->make(), то фабрика сворачивает единственный экземпляр Object:: class в коллекцию Eloquent для вас.

2 ответа

Решение

collect() Помощник просто создает новый экземпляр Illuminate\Support\Collection,

function collect($value = null)
{
    return new Collection($value);
}

Вы можете сделать то же самое с любой коллекцией.

Осветить \Database\ красноречивый \ Коллекция

$collection = new Illuminate\Database\Eloquent\Collection($value);

App\Models\CustomCollection

$collection = new \App\Models\CustomCollection($value);

Поскольку вы используете:

$obj = factory(Object::class)->make();

подделать Eloquent объекты, если вы просто сделаете это вместо этого:

$collection = factory(Object::class, 1)->make()

factory() сворачивает единственный экземпляр Object::class в коллекцию Eloquent для вас. "1" - это количество объектов в произведенной коллекции, поэтому вы можете изменить это значение на 2, если вам нужно 2 объекта и т. Д.

Другие вопросы по тегам