我需要将返回对象更改为laravel api中的数组。
有人指导吗?我遇到错误,无法找出原因??
将 {} 更改为此 []
ERROR错误:“尝试与'[object Object]进行比较时出错。仅数组和 允许迭代(API Laravel和前端angular 7)
我的代码 API Laravel
public function show($id)
{
$arCategoria = \App\Favorito::join('categoria', 'categoria.cd_categoria', '=', 'link.cd_categoria')
->select('*')
->where('categoria.cd_categoria_pai',$id)
->where('link.cd_usuario',$this->token['cd_usuario'])
->where('link.bo_ativo',true)
->get();
return (array)$this->processarCategoria($arCategoria);
}
public function processarCategoria($arCategoria){
$ar = array();
$cont = 0;
foreach($arCategoria as $key => $value){
$ar[$value['no_categoria'].'_'.$value['cd_categoria']][] = (array)array(
'no_link'=>$value['no_link'],
'cd_link'=>$value['cd_link'],
'vl_link'=>$value['vl_link'],
'bo_ativo'=>$value['bo_ativo'],
'link'=>$value['link']
);
$cont++;
}
return (array)$ar;
}
我的Laravel API返回
{
"Documentation_3": [
{
"no_link": "stackoverflow",
"cd_link": 5,
"vl_link": null,
"bo_ativo": 1,
"link": "https://stackoverflow.com"
},
{
"no_link": "Adventures of Time",
"link": "http://adventuresoftime.com.br"
}
],
"Things to buy_5": [
{
"no_link": "Games",
"link": "Games.com.br"
}
]
}
答案 0 :(得分:0)
如果dd($this->processarCategoria($arCategoria->toArray()))
是纯PHP数组,则表示它可以工作。
顺便说一句,我想您的原始代码也行得通,也许您dd((array) $this->processarCategoria($arCategoria))
并检查。
根据PHP.net,(数组)$ scalarValue与数组($ scalarValue)完全相同
根据Laravel document,toArray()方法将集合转换为纯PHP数组。
为什么数组在JSON
之后变成return
,就像有人在使用json_encode
PHP函数一样,是因为:
Laravel自动将数组转换为JSON响应, 除了从路由和控制器返回字符串。 Laravel document
即laravel将数组转换为JSON,因此它可能会显示在屏幕上。
Route::get('/', function () {
//return is the same as dd()
//dd(json_encode([1=>'a', 2=>'b', 3=>'c']));
return [1=>'a', 2=>'b', 3=>'c'];
});