Laravel 5.4 - 集合的实例在传递时不返回 true,这似乎是集合



我正在使用一种执行instanceof Collection检查的方法:

if ($group instanceof Collection) {
$group = $group->pluck('name');
}

这在很多地方都在使用,所以我无法更改它(不是我想要的(,但我确实想传入组名的集合。我像这样实例化我的集合:

$group = collect(['one', 'two', 'three']);

当我dd$group变量时,它看起来像一只鸭子,

Collection {#612
#items: array:3 [
0 => "one"
1 => "two"
2 => "three"
]
}

但在该检查实例中返回 false。知道为什么会这样吗?

您的问题是instanceof正在检查 Eloquent 扩展Collection的实例。

use IlluminateDatabaseEloquentCollection;

如果更改基集合类use,它应该可以工作:

use IlluminateSupportCollection;

Laravel中(至少(有两种不同类型的Collection类:

  • 照亮\支持\收集
  • Illuminate\Database\Eloquent\Collection

检查此代码:

$collection = collect([1, 2, 3]);
dd(
$collection instanceof Collection,
$collection instanceof IlluminateSupportCollection,
$collection instanceof IlluminateDatabaseEloquentCollection
);

在这种情况下,我得到的回报是

false // Collection
true  // IlluminateSupportCollection
false // IlluminateDatabaseEloquentCollection

因此,使用collect()会创建IlluminateSupportCollection的实例,但可用的Collect版本(或包含在use语句中(不是正确的。

最新更新