使用Paginate的Laravel JSON字段到数据表的模型属性

时间:2017-10-05 03:14:15

标签: json laravel model

我的代码的Json Column名为:json,用于自定义用户字段。我希望我的数据表将json列作为单独的字段进行显示。所以基本上如果我的模型将数据返回为:

{
"id":1
"json" : {
    "name": "joe"    
    }
}

我需要它转换为(当我调用Model :: all()或Model :: paginate()时):

{
"id":1
"name": "joe"  
}

这样我的数据表就可以显示这些数据了。我不能将appends属性添加到我的模型中,因为这个json是动态字段,因此从一开始就不知道。我试过这两个变种:

public function getJsonAttribute($value)
{
    $json = json_decode($value);
    foreach ($json as $k => $v) {

        array_push($this->appends, $key);
        // or
        $this->attributes[$k] = $v;
    }
    return $json;
}

但它们都不起作用。

1 个答案:

答案 0 :(得分:2)

在你的情况下,这可能是有效的。但它的多数组意味着你可以添加一个foreach循环。然后才工作。

在您的代码中 $ key 未定义

public function getJsonAttribute($value)
{
    $json = json_decode(json_encode($value),TRUE);
    $jsonArr = [];
    foreach ($json as $k => $v) {
        if($k == "id")
            $jsonArr['id'] = $v; 
        if($k == "json" && empty($v['name']) === false)
            $jsonArr['name'] = $v['name']; 
    }

    return (object)$jsonArr;
}