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

iat*_*nut 2 phpunit laravel laravel-collection

如果我这样做:

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

collect($obj);
Run Code Online (Sandbox Code Playgroud)

我返回了一个类型的集合:

Illuminate\Support\Collection
Run Code Online (Sandbox Code Playgroud)

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

public function newCollection(array $models = [])
{
    return new CustomCollection($models);
}
Run Code Online (Sandbox Code Playgroud)

你会CustomCollection在文件 CustomCollection.php 中创建你的,像这样开始:

class CustomCollection extends Collection
{
Run Code Online (Sandbox Code Playgroud)

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

Illuminate\Database\Eloquent\Collection
Run Code Online (Sandbox Code Playgroud)

或者,在创建我自己的自定义集合的情况下,我怎么能返回一个类型的集合:

App\Models\CustomCollection
Run Code Online (Sandbox Code Playgroud)

我想用 collect()帮助程序或任何其他方式因为我不会出于编写 PHPUnit 测试的目的访问数据库。

==========

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

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

Rem*_*mul 5

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

function collect($value = null)
{
    return new Collection($value);
}
Run Code Online (Sandbox Code Playgroud)

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

Illuminate\Database\Eloquent\Collection

$collection = new Illuminate\Database\Eloquent\Collection($value);
Run Code Online (Sandbox Code Playgroud)

应用\模型\自定义集合

$collection = new \App\Models\CustomCollection($value);
Run Code Online (Sandbox Code Playgroud)