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 объекта и т. Д.