我正在使用一种执行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
语句中(不是正确的。