Laravel: collect() 助手 - 设置集合类型

Laravel: collect() helper - set type of collection

如果我这样做:

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

collect($obj);

我return编辑了一个类型的集合:

Illuminate\Support\Collection

Laravel 还允许您使用特定方法定义自己的集合。在模型中,您可以:

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

你会在文件 CustomCollection.php:

中这样开始你的 CustomCollection
class CustomCollection extends Collection
{

我想知道如何 return 类型的集合:

Illuminate\Database\Eloquent\Collection

或者,在创建我自己的自定义集合的情况下,我如何 return 类型的集合:

App\Models\CustomCollection

我想使用 collect() 帮助程序或任何其他我不访问数据库以编写 PHPUnit 测试的方式来执行此操作。

==========

编辑:我正在使用 factory(Object::class)->make() 来欺骗 Eloquent 我试图放入集合中的对象。

如果您只执行 factory(Object::class, 1)->make(),工厂会为您将 Object::class 的单个实例滚动到 Eloquent 集合中。

collect() 助手刚刚创建了一个新的 Illuminate\Support\Collection 实例。

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

您可以对任何集合执行相同的操作。

Illuminate\Database\Eloquent\Collection

$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,等等