Laravel 5.4 - instanceof Collection не возвращает true, когда передается то, что кажется Collection - PullRequest
0 голосов
/ 07 сентября 2018

Я работаю с методом, который делает 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 в этом случае проверки. Есть идеи, почему это может быть так?

Ответы [ 2 ]

0 голосов
/ 07 сентября 2018

Ваша проблема в том, что instanceof проверяет экземпляр расширения Eloquent Collection.

use Illuminate\Database\Eloquent\Collection;

Если вы измените use базовый класс коллекции, он должен работать:

use Illuminate\Support\Collection;
0 голосов
/ 07 сентября 2018

В Laravel есть (как минимум) два разных типа Collection классов:

  • Осветите \ Support \ Collection
  • Осветите \ Database \ Eloquent \ Коллекция

Проверьте этот код:

$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), не является правильной.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...