0

in my Laravel app, the database has a column named "mavads" as :

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

This is the form that send data as PUT to the controller to update the database:


@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

the Food Model:

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

in Controller, I get $request and want to update each { "need": "run2","amount": "rum1"} of en or ru languages:

    $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

4
  • what error does it occur? Commented Mar 14, 2020 at 11:37
  • { "en":[ "....", "...."] } .... instead of { "en": [ {"need": "......", "amount" : " ..... "} ] } Commented Mar 14, 2020 at 11:42
  • plz post the value of $enmavad Commented Mar 14, 2020 at 11:57
  • $enmavad = $request->only('enneed', 'enamaount'); return $enmavad; {"enneed":["en need 1","en need 2"],"enamount":["en amount 1","en amount 2"]} Commented Mar 14, 2020 at 12:20

1 Answer 1

1
@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

When you submit, the values will be wrap in array for the key enneed and enamount, look like this:

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

So you can change your html to be like this:

@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

It will return:

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

So in your controller, you can directly get the data format:

    $enmavad = $request->only('en');
    $rumavad = $request->only('ru');
    $food->mavads = array_merge($enmavad, $rumavad);
Sign up to request clarification or add additional context in comments.

5 Comments

thank you for time and help but I get this in database adn error" ``` { "en": { "en": [ { "'need'": "en need 1", "'amount'": "en amount 1" }, { "'need'": "en need 2", "'amount'": "en amount 2" } ] }, "ru": { "ru": { "1": { "'need'": "ru need 2", "'amount'": "ru amount 2" } } } } ```
everything seems ok except this single quests : {"en":[{" 'need' " .... which makes an error in reading from column data
@MehdiYaghoubi sorry for the single quote, I have removed it.
thank you friend for all help and guide. you art great. wish you the best and health.

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.