I have a resource-collection to get all my dialogues. Because the frontend is already coded (by another person), I want to return all of those as an object, with the dialogue_id of the database as keys and the dialogue object as values.
But when I want to convert the array I got from my resource collection (with (object) $array), it still returns an array without any of the keys I have set.
In my controller function I call:
return new DialogueResourceCollection($dialogues);
My collection resource looks like the following:
class DialogueResourceCollection extends ResourceCollection { /** * Transform the resource into an array. * * @param IlluminateHttpRequest $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; } }
What I get:
[ { "dialogue_id": 1, "text": "example text" }, ...
What I want to get:
{ "34" : { "dialogue_id": 34, "text": "example text" }, ... }
Advertisement
Answer
When returning a resource collection from a route, Laravel resets the collection’s keys so that they are in simple numerical order. However, you may add a preserveKeys property to your resource class indicating if collection keys should be preserved. Put this above your code.
public $preserveKeys = true;
read docss here preserve keys