我正在使用一种进行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"
]
}
,但在该checkof实例中返回false。任何想法为什么会这样?
答案 0 :(得分:2)
Laravel中(至少)有两种不同类型的Collection
类:
检查此代码:
$collection = collect([1, 2, 3]);
dd(
$collection instanceof Collection,
$collection instanceof Illuminate\Support\Collection,
$collection instanceof Illuminate\Database\Eloquent\Collection
);
在这种情况下,我得到的回报是
false // Collection
true // Illuminate\Support\Collection
false // Illuminate\Database\Eloquent\Collection
因此,使用collect()
创建了Illuminate\Support\Collection
的实例,但是可用的Collect
版本(或包含在use
语句中)不是正确的版本。
答案 1 :(得分:2)
您的问题是instanceof
正在检查Eloquent扩展Collection
的实例。
use Illuminate\Database\Eloquent\Collection;
如果您更改了use
基类集合,则它应该起作用:
use Illuminate\Support\Collection;