Как получить данные в виде массива ассоциации, например pg_fetch_asso c в laravel контроллере? - PullRequest
1 голос
/ 14 января 2020

Когда я использую pg_fetch_asso c, тогда мой вывод похож на

[{"0":"T","id":"I","1":"T-ABC"},
{"0":"T","id":"I","1":"T-XYZ"},
{"0":"T","id":"I","1":"T-QWR"}]

Но сейчас я использую Laravel framework, а в моем контроллере использую код ниже

$type=$request->type;
$query= typeModel::get()->where('id',$type);
return response()->json($query);

Приведенный выше код дает мне следующий формат

{"11":{"id":"I","type":"T-ABC"},
"12":{"id":"I","type":"T-XYZ"},
"13":{"id":"I","type":"T-OWR"}}

Но мне нужен формат как pg_fetch_asso c Как мне добиться этого в laravel

1 Ответ

0 голосов
/ 14 января 2020

Использование метода eloquent collection map() для сопоставления каждого stdClass;

Поскольку pg_fetch_assoc возвращает имя столбца , значение столбца , ключ индекса и значение индекса ;

Таким образом, мы можем использовать array_merge для объединения двух массивов.

Один равен $array1, включая имя столбца , значение столбца ;

Другой параметр $array2 имеет только все значения столбца ;

Преобразовать массив в stdClass , он автоматически добавит индексный ключ к этому $array2, и этот индексный ключ начинается с 0:

$query = typeModel::where('id',$type)->get()->map(function($item) {
         $array1 = $item->toarray();
         $array2 = array_values($array1);
         return (object) array_merge($array1, $array2);
    })->toArray();
...