Laravel Resource Collection удаляет мои ключи массива - PullRequest
0 голосов
/ 24 января 2020

У меня есть коллекция ресурсов, чтобы получить все мои диалоги. Поскольку внешний интерфейс уже закодирован (другим человеком), я хочу вернуть все эти объекты в виде объекта, с аргументом dialog_id базы данных в качестве ключей и объектом диалога в качестве значений.

Но когда я хочу преобразовать массив, который я получил из своей коллекции ресурсов (с (object) $ array), он все еще возвращает массив без любого из ключей, которые я установил.

В моей функции контроллера я вызываю:

return new DialogueResourceCollection($dialogues);

Мой ресурс коллекции выглядит следующим образом:

class DialogueResourceCollection extends ResourceCollection
{
    /**
     * Transform the resource into an array.
     *
     * @param  \Illuminate\Http\Request $request
     * @return array
     */
    public function toArray($request)
    {
       $array = [];
        for ($i = 0; $i < sizeof($this); $i++) {
            $j = $this[$i]->dialogue_id;
            $array[$j] = $this[$i];
        }

        return $array;
    }
}

Что я получаю:

[
    {
        "dialogue_id": 1,
        "text": "example text"
    }, 
...

Что я хочу получить:

{
 "34" :   {
        "dialogue_id": 34,
        "text": "example text"
    }, 
...
}

1 Ответ

1 голос
/ 24 января 2020

При возврате коллекции ресурсов из маршрута, Laravel сбрасывает ключи коллекции, чтобы они были в простом числовом порядке. Однако вы можете добавить свойство preserveKeys в свой класс ресурсов, указывающее, должны ли ключи коллекции быть сохранены. Поместите это над своим кодом.

public $preserveKeys = true;

прочитайте do css здесь сохраните ключи

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