我需要在laravel中返回更改。数组{}到[]的对象(尝试与'[object Object]进行比较时出错)

时间:2019-01-07 01:16:43

标签: php laravel

我需要将返回对象更改为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"
        }
    ]
}

1 个答案:

答案 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'];
});