laravel, как обновить массив в столбце json? - PullRequest
0 голосов
/ 14 марта 2020

в моем приложении Laravel в базе данных есть столбец с именем "mavads":

{
  "en": [
    {
      "need": "enn1",
      "amount": "enm1"
    },
    {
      "need": "enn2",
      "amount": "enm2"
    },
    {
      "need": "enn3",
      "amount": "enm3"
    },
  ],
  "ru": [
    {
      "need": "run1",
      "amount": "rum1"
    },
    {
      "need": "run2",
      "amount": "rum1"
    },
  ]
}

Это форма, которая отправляет данные в виде PUT на контроллер для обновления базы данных:


@foreach($food->mavads['en'] as $m)
      <input type="text" class="input" name="enneed[]" value="{{ $m['need'] }}">
      <input type="text" class="input" name="enamount[]" value="{{ $m['amount'] }}">
@endforeach

@foreach($food->mavads['ru'] as $m)
      <input type="text" class="input" name="runeed[]" value="{{ $m['need'] }}">
      <input type="text" class="input" name="ruamount[]" value="{{ $m['amount'] }}">
@endforeach

Модель питания:

  protected $casts = [
    'mavads' => 'array'
  ];

в Контроллере, я получаю $ request и хочу обновить каждое {"need": "run2", "amount": "rum1"} из en или ru языки:

    $enmavad = $request->only('enneed', 'enamount');
    $rumavad = $request->only('runeed', 'ruamount');
    $food->mavads = ["en" => $enmavad, "ru" => $rumavad];

but I get the error and no correct update

1 Ответ

1 голос
/ 14 марта 2020
@foreach($food->mavads['en'] as $m)
      <input type="text" class="input" name="enneed[]" value="{{ $m['need'] }}">
      <input type="text" class="input" name="enamount[]" value="{{ $m['amount'] }}">
@endforeach

Когда вы отправляете, значения будут упакованы в массив для ключа enneed и enamount, выглядят так:

[
  'enneed' => ['enn1', 'enn2'],
  'enamount' => ['enm1', 'enm2']
]

Таким образом, вы можете изменить html на быть таким:

@foreach($food->mavads['en'] as $i => $m)
      <input type="text" class="input" name={{"en[$i][need]"}} value="{{ $m['need'] }}">
      <input type="text" class="input" name={{"en[$i][amount]"}} value="{{ $m['amount'] }}">
@endforeach

Будет возвращено:

[
  'en' =>[[
    'need' => 'enn1',
    'amount' => 'emn1'
  ],[
    'need' => 'enn2',
    'amount' => 'emn2'
  ]],
]

Таким образом, в вашем контроллере вы можете напрямую получить формат данных:

    $enmavad = $request->only('en');
    $rumavad = $request->only('ru');
    $food->mavads = array_merge($enmavad, $rumavad);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...