Получение json в контроллере laravel - PullRequest
0 голосов
/ 21 сентября 2018

Я отправляю данные json с помощью ajax на контроллер, но я не могу окончательно передать свои данные.

Код

data that i send in playload

[{specification_id: "6", text_dec: "1", product_id: "21"},…]
0: {specification_id: "6", text_dec: "1", product_id: "21"}
1: {specification_id: "7", text_dec: "3", product_id: "21"}
2: {specification_id: "31", longtext_dec: "fsg", product_id: "21"}

controller

public function addnewcustomsubspecifications(Request $reqss)
    {
        // dd($reqss->json()->all());

    //   $this->validate($reqss, array(
    //     'product_id' => 'required',
    //     'specification_id' => 'required',
    //     'text_dec' => 'nullable',
    //     'longtext_dec' => 'nullable',
    //   ));

      $datas = $reqss->json()->all();
      foreach($datas as $data){
          $add = CustomProductSpecification::create([
              'product_id' => $data['product_id'],
              'specification_id' => $data['specification_id'],
              'text_dec' => $data['text_dec'],
              'longtext_dec' => $data['longtext_dec'],
          ]);
          $parent = Specification::where('id', '=', $data['specification_id'])->first();
      }

      return response()->json(array('data'=>$add,'parent'=>$parent));
    }

Если я прокомментирую мою проверку, я получу:

"message": "Undefined index: longtext_dec",
    "exception": "ErrorException",

, если нет, я получу:

{"message":"The given data was invalid.","errors":{"product_id":["The product id field is required."],"specification_id":["The specification id field is required."]}}

так выглядят мои данные:

array:3 [
  0 => array:3 [
    "specification_id" => "6"
    "text_dec" => "1"
    "product_id" => "21"
  ]
  1 => array:3 [
    "specification_id" => "7"
    "text_dec" => "3"
    "product_id" => "21"
  ]
  2 => array:3 [
    "specification_id" => "31"
    "longtext_dec" => "fsggf"
    "product_id" => "21"
  ]

Примечание: я думаю, что проблема с проверкой возникает из-за $this->validate($reqss, array( Мне нужно использовать что-то вроде $this->validate($reqss->json(), array(, но это невозможно

Идеи

  1. Я думаю, что моя проверка $reqss должна быть изменена для проверки кода JSON (как описано выше)
  2. , если по какой-либо причине невозможно использовать проверку, я думаю, что мне нужноif заявление для моих longtext_dec и text_dec части в случае, если они не предоставлены, игнорируется и не возвращает первую ошибку выше.

PS: Мои мысли моглибыть глупым для тебя, но если бы я знал истинный ответ, я бы не спросил здесь, верно?:)

Ну, есть идеи?

1 Ответ

0 голосов
/ 21 сентября 2018

Вам, вероятно, придется оценивать каждый массив отдельно.Я не могу придумать ничего лишнего, что проверит несколько строк одновременно.Тем не менее, поскольку text_dec и longtext_dec могут иметь значение null или отсутствовать, вам необходимо учесть это при получении значений:

$add = CustomProductSpecification::create([
    'product_id' => $data['product_id'],
    'specification_id' => $data['specification_id'],
    'text_dec' => array_key_exists('text_dec', $data) ? $data['text_dec'] : null,
    'longtext_dec' => array_key_exists('longtext_dec', $data) ? $data['longtext_dec'] : null,
]);

В троичном массиве этот столбец будет указан.Если это так, он добавит значение, если нет, передаст нулевое значение.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...