Добавить строку, когда данные отправляются как JSON в Laravel Controller - PullRequest
0 голосов
/ 09 ноября 2018

Что я хочу сделать, это добавить строку 'string/' при отправке ответа JSON.

Например:

Когда я отправляю данные как коллекцию, вот так ..

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 голосов
/ 09 ноября 2018

Вы можете использовать пользовательский атрибут accessor для изменения данных модели при извлечении. Таким образом, вы можете изменить его при получении данных, но он не изменит его при хранении данных:

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

* 1006 Е.Г. *

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,
    ];
}
0 голосов
/ 09 ноября 2018

Похоже, вы могли бы использовать 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, как вы уже делаете.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...