Поиск в данных кеша дает массиву первый индекс 1 - PullRequest
1 голос
/ 27 июня 2019
$this->getCachedCategories();
//Above code Stores the data in cache for future use. So, it goes to the database only 
//one time and next time pick the data from cache. So far everything is good.

//I have a search criteria which is in the form of array. I filter above cache data based 
//upon the search criteria and gets the data.
foreach ($userInputsForFilter as $key => $value) {
    $this->Categories = $this->Categories->where($key, $value);
}

Вот скриншот. Если вы заметили, что полученные данные имеют первый индекс с 1 вместо 0. На самом деле вторая запись появилась после того, как данные кэша были отфильтрованы.

enter image description here

Подскажите, пожалуйста, почему это происходит при поиске данных в кеше? Это не происходит при переходе в базу данных.

Массив в код JSON

$CategoryResponse = $this->iCategory->All([], []);
return \Response::json($CategoryResponse, 200);

1 Ответ

1 голос
/ 27 июня 2019

Laravel Collections, и массивы в целом в PHP могут быть ассоциативными, что означает, что первый индекс может быть чем-то, что не обязательно 0. При преобразовании в JSON через Response::json() или return response->json(), это может быть трактуется как object вместо массива в JS. Для этого преобразуйте Collection в массив и измените на indexed с помощью функции PHP array_values():

$CategoryResponse = $this->iCategory->All([], []);
return response()->json(array_values($CategoryResponse->toArray()), 200);
// Older Laravel syntax
// return \Response::json(array_values($CategoryResponse->toArray()), 200);

В ответе JSON он должен отображаться правильно в виде массива с 0 в качестве первого индекса.

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