laravel, Как обновить массив в столбце json?

laravel, Как обновить массив в столбце json?

14.03.2020 02:22:44 Просмотров 11 Источник

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

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

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


@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

У вопроса есть решение - Посмотреть?

Ответы - laravel, Как обновить массив в столбце json? / laravel, How to update array in json column?

Является ответом!
TsaiKoga

14.03.2020 04:01:23

@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);
Закрыть X