Laravel: ресурсы с полем json - PullRequest
0 голосов
/ 27 мая 2020

Я использую Laravel 7.x, и у меня есть две модели (CustomerOrder, состоящие из множества CustomerOrderLines) с отношениями родитель-потомок. Родительская (CustomerOrder) модель имеет поле типа json среди своих полей.

CustomerOrderResource. php:

return [
  'id' => $this->id,
  'wfx_oc_no' => $this->wfx_oc_no,
  'qty_json' => json_decode($this->qty_json)
];

CustomerOrderLineResource. php:

return [
  'id' => $this->id,
  'description' => $this->description,
  'customer-order' => $this->customerOrder
];

Запрос CustomerOrder-> GET возвращает правильно отформатированные данные как:

"data": {
    "id": 11,
    "wfx_oc_no": 12,
    "qty_json": {
        "L": "20",
        "M": "30",
        "S": "20",
        "XL": "100"
    }
}

Но для CustomerOrderLine-> GET ответ будет следующим:

"data": {
    "id": 15,
    "description": "test desc",
    "customer-order": {
        "id": 11,
        "wfx_oc_no": 12,
        "qty_json": "{\"L\": \"20\", \"M\": \"30\", \"S\": \"20\", \"XL\": \"100\"}"
    }
}

json поле неправильно отформатировано. Кажется, это не go через класс ресурсов. Пожалуйста, дайте мне знать, как я могу исправить это?

FYI

CustomerOrderLine. php:

public function parent()
{
   return $this->belongsTo(CustomerOrder::class);
}

Ответы [ 2 ]

0 голосов
/ 27 мая 2020

Наконец удалось решить эту проблему, используя json cast . Поле было включено в массив $casts модели.

0 голосов
/ 27 мая 2020

Используйте этот формат Json

$data = [
  'id' => $this->id,
  'wfx_oc_no' => $this->wfx_oc_no,
  'qty_json' => json_decode($this->qty_json)
];
$array = array("status" => 200, "message" => "Success", "data" => $data);
return \Response::json($arr);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...