在Laravel Controller中将数据作为JSON发送时附加字符串

时间:2018-11-08 23:50:52

标签: json laravel laravel-5 eloquent

我想做的是在发送JSON响应时附加字符串'string/'

例如:

当我像这样收集数据时发送数据。

return response()->json("example_json" => $datacollection)

这将显示为:

{
  "example_json"
   [{
      "data1": "somedata1",
      "data2": "somedata2",
      "data3": "somedata3"
   }]
}

现在,我想做的是附加一个字符串,例如第3个数据的变量内容:

{
  "example_json"
   [{
      "data1": "somedata1",
      "data2": "somedata2",
      "data3": "string/somedata3"
   }]
}

是否有某种方法可以在不永久更改数据库中数据的情况下进行此操作?我只想这样做一次或两次,不要只在将数据库内容发送给它时更改其名称。

非常感谢!

2 个答案:

答案 0 :(得分:0)

好像您可以在此处使用map()来根据需要更新数据。

例如

$updatedDatacollection = $datacollection->map(function($item, $key){
    if($key == 'data3') { // or some other condition ...
        return 'string/' . $item; // append a string
    }
    return $item; // otherwise leave it unchanged
});

这将更新$updatedDatacollection,但数据库保持不变。然后,您可以像已经做的一样以JSON格式返回。

答案 1 :(得分:0)

您可以使用自定义属性访问器在检索时修改模型的数据。这样,您可以在获取数据时对其进行修改,但在存储数据时不会对其进行更改:

https://laravel.com/docs/5.7/eloquent-mutators#defining-an-accessor

例如

public function getData3Attribute($value)
{
    return 'string/'.$value;
}

然后,当您检索模型时,它将看起来像这样:

{
    "data1": "somedata1",
    "data2": "somedata2",
    "data3": "string/somedata3"
}

注意:这种转换将发生在您检索data3的任何地方,包括PHP代码。如果您只想在发送JSON响应时修改值,请查看API资源:

https://laravel.com/docs/5.7/eloquent-resources

JSON资源toArray()方法:

public function toArray($request)
{
    return [
        'data1' => $this->data1,
        'data2' => $this->data2,
        'data3' => 'string/'.$this->data3,
    ];
}