dima9595
@dima9595
Junior PHP

Как правильно сохранять JSON в Laravel?

Делаю сохранение данных. Некоторые данные хранятся как varchar и сохраняются без проблем, а некоторые должны конвертироваться в json - в этом и проблема.

Сохраняется так:
{"news": "{\"add\":null,\"edit\":null,\"delete\":null,\"editMy\":null,\"deleteMy\":null,\"reason\":\"on\",\"premoderator\":\"on\"}", "comments": "{\"add\":\"on\",\"edit\":null,\"delete\":null,\"editMy\":null,\"deleteMy\":null,\"reason\":\"on\",\"premoderator\":null}"}

А нужно так:
{"news": {"add": false, "edit": false, "show": true, "delete": false, "editMy": false, "reason": true, "deleteMy": false, "premoderator": true}, "comments": {"add": true, "edit": false, "show": true, "delete": false, "editMy": false, "reason": true, "deleteMy": false, "premoderator": false}}


Сохраняю многомерный массив:
'site_role' => json_encode([
   'news' => json_encode([
      'add' => $request->newsAdd,
      'edit' => $request->newsEdit,
      'delete' => $request->newsDelete,
      'editMy' => $request->newsEditMy,
      'deleteMy' => $request->newsDeleteMy,
      'reason' => $request->newsReason,
      'premoderator' => $request->newsPremoderator
   ]),
   'comments' => json_encode([
      'add' => $request->commentsAdd,
      'edit' => $request->commentsEdit,
      'delete' => $request->commentsDelete,
      'editMy' => $request->commentsEditMy,
      'deleteMy' => $request->commentsDeleteMy,
      'reason' => $request->commentsReason,
      'premoderator' => $request->commentsPremoderator
      ])
   ])


Как это правильно реализовать, что бы сохранение и вывод был корректный.
PS: вывожу следующим образом:

В модели делаю так:
protected $casts = [
   'site_role' => 'array',
   'moder_role' => 'array',
   'admin_role' => 'array',
];


В самом view:
$role->site_role['news']['editMy']
  • Вопрос задан
  • 1096 просмотров
Решения вопроса 1
amux
@amux
alp.ac
Так зачем вы внутренние массивы в json_encode обернули?
У вас и получается json c двумя строками внутри.

Хватит site_role => json_encode(...)
Ответ написан
Пригласить эксперта
Ответы на вопрос 1
@Kostik_1993
Web Developer
А зачем вам View если вы Json отдаете?
Прямо в контроллере делайте return $role->site_role['news']['editMy']; и не нужно никаких view
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы