Laravel - неправильная структура ответа JSON при использовании уникальных - PullRequest
1 голос
/ 13 июля 2020

Итак, у меня есть базовый запрос c, который возвращает нашу модель Period, этот запрос может дополнительно фильтровать эти периоды по отношениям Project. Вот сокращенная версия ниже ...

$query = Period::query();

$query->whereIn('project_id', [1, 2]);

$entries = $query->get();

$projects = $entries->pluck('project')->unique();

return response()->json($projects);

Итак, учитывая приведенный выше код, по какой-то причине возвращаемый JSON не является массивом объектов, это объект объектов, например {"0":{}, "2":{}}. Если я удалю вызов unique(), он правильно вернет массив объектов.

Коллекция с уникальным методом и без него являются экземплярами Illuminate\Support\Collection, и оба свойства items коллекции являются массив объектов, поэтому я не вижу почему он возвращает разностную структуру.

Единственное различие, которое я вижу, это то, что когда я dd собираю коллекцию с вызовом unique, тогда ключи зеленые, а без уникального вызова они синие, указывая на строку и целое число, но когда я делаю $projects->keys(), они все целые числа (но может ли keys преобразовывать их в целые числа?).

С unique звоните: with unique call

Without the unique call: введите описание изображения здесь

1 Ответ

1 голос
/ 13 июля 2020

Я понял это, unique сохраняет исходные ключи элемента, что означает, что они не обязательно должны быть в числовом порядке и, следовательно, не могут быть закодированы JSON, поэтому вместо этого он возвращает объект.

Использование ->unique()->values() устраняет проблему.

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