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

时间:2018-11-22 10:02:34

标签: laravel phpunit laravel-collection

如果我这样做:

$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测试目的而无法访问数据库的任何其他方式来实现此目的。

==========

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

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

2 个答案:

答案 0 :(得分:2)

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);

答案 1 :(得分:0)

因为您正在使用:

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

欺骗口才的对象,如果您只是这样做:

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

factory()将Object :: class的单​​个实例滚动到一个Eloquent集合中。 “ 1”是所生成集合中对象的数量,因此如果您需要2个对象,则可以将其更改为2。