Laravel: collect () helper - установить тип коллекции - PullRequest
0 голосов
/ 22 ноября 2018

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

$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.

==========

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

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

Ответы [ 2 ]

0 голосов
/ 22 ноября 2018

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

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

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

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

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

0 голосов
/ 22 ноября 2018

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

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

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

Illuminate \ Database \ Eloquent\ Коллекция

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

Приложение \ Модели \ CustomCollection

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