Laravel 5.4-instanceof Collection在通过时似乎未返回true

时间:2018-09-07 20:17:57

标签: php laravel laravel-5 eloquent

我正在使用一种进行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。任何想法为什么会这样?

2 个答案:

答案 0 :(得分:2)

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

  • Illuminate \ Support \ Collection
  • Illuminate \ Database \ Eloquent \ 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;