Сохранить несколько данных один раз в базу данных в Laravel - PullRequest
0 голосов
/ 24 августа 2018

У меня есть форма в таблице, которая имеет разные поля.Я хочу иметь возможность хранить все данные один раз.Я искал переполнения стека, все ответы, которые я получил, не решили проблему. Поэтому я должен опубликовать свой собственный вопрос. Представление

<td><input type="text" name="sflt[]" value="{{ $r['fltno'] }}" readonly="readonly" class="form-control"/></td>
<td><input type="text" name="smodel[]" value="{{ $r['model']}}" readonly="readonly" class="form-control"/></td> 
<td><input type="text" name="sengine[]" value="{{ $r['engine_type'] }}" readonly="readonly" class="form-control"/></td> 
<td><input type="text" name="sloc[]" value="{{ $r['location'] }}" readonly="readonly" class="form-control"/></td> 
<td><input type="text" name="sstye[]" value="{{ $sty }}" readonly="readonly" class="form-control"/></td> 
<td><input type="text" name="snsvr[]" value="{{ $nsvr}}" readonly="readonly" class="form-control"/></td> 

Контроллер

          $data = [];
          **//Get the input variables**
          $fltno= $request['sflt'];
          $model = $request['smodel'];
          $engine = $request['sengine'];
          $loc  = $request['sloc'];

// Сохранение каждой переменной при извлечении в пустой массив

      foreach($fltno as $fltno)
         {
      $data[] = [
                'fltno'=>$request['sflt'],
                'model'=>$request['smodel'],
                'engine'=>$request['sengine'],
                loc'=>$request['sloc'],
               'serviceType'=>$request['sstye'],
               'nextSvr'=> $request['snsvr'] 
                ];
        }

       ModelName::insert($data); 

Когда я выполняю это, выдается ошибка: неверный аргумент, предоставленный для foreach ()

Пожалуйста, что я делаю не так или как лучше всего вставить все этиданные сразу в базу данных

Ответы [ 4 ]

0 голосов
/ 24 августа 2018

Я думаю, что вы можете сделать это таким образом

$fltnos = $request->input('sflt', []); // second parameter is to set default value 
$models = $request->input('smodel', []);
$engines = $request->input('sengine', []);
$locs  = $request->input('sloc', []);

также вам нужно проверить ваши объемные данные перед сохранением

вы можете сделать это так

public function store(Request $request)
{
    $validatedData = $request->validate([
        'sflt.*' => 'email|unique:users',
        'smodel.*' => 'required'
    ]);


if(validatedData) {

foreach($fltnos as $key => $fltno) {
    $modelName = new ModelName;
    $modelName->fltno = $fltno;
    ...
    $modelName->save()
}

}

}
0 голосов
/ 24 августа 2018

Я думаю, что вы делаете ошибку при получении тела запроса

$fltno = $request->input('sflt');

для foreach я думаю, что вы можете сделать это

$fltnos = $request->input('sflt');

foreach($fltnos as $fltno) {
}

Если вы используете ORM

$fltnos = $request->input('sflt');
$models = $request->input('smodel');
$engines = $request->input('sengine');
$locs  = $request->input('sloc');

foreach($fltnos as $key => $fltno) {
    $modelName = new ModelName;
    $modelName->fltno = $fltno;
    $modelName->model = isset($models[$key]) ? $models[$key] : ''; // this is just workaround, you must make sure all field have same length if want to do this
    ...
    $modelName->save()
}
0 голосов
/ 24 августа 2018

Привет, Дейв. Я думаю, что ты хочешь сделать что-то вроде этого

$data = $request->all();
$finalArray = array();
foreach($data as $key=>$value){
   array_push($finalArray, array(
                'fltno'=>$value['sflt'],
                'model'=>$value['smodel'],
                'engine'=>$value['sengine'],
                'loc'=>$value['sloc'],
                'serviceType'=>$value['sstye'],
                'nextSvr'=> $value['snsvr'] )
   );
});

Model::insert($finalArray);

Это отправит все данные.Я предполагаю, что вы получаете массив в запросе с этими ключами.

Надеюсь, это поможет.

0 голосов
/ 24 августа 2018

это мой рабочий пример, который вы можете реализовать в своем коде.

$competition_que = [];
        foreach ($input['options'] as $key => $value) {
            $competition_que[$key]['competition_id'] = $request->competition_id;
            $competition_que[$key]['question_id'] = $question->id;
            $competition_que[$key]['options'] = $input['options'][$key];
            $competition_que[$key]['created_at'] = Carbon::now();
            $competition_que[$key]['updated_at'] = Carbon::now();
            $competition_que[$key]['is_answer'] = ($key == $input['is_answer']) ? 'true' : 'false';
        }

//        return $competition_que;
        CompetitionAnswer::insert($competition_que);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...