Как исправить массовую вставку записей Laravel, сохраняя только первую запись в базе данных - PullRequest
0 голосов
/ 29 апреля 2019

Я пытаюсь сохранить несколько записей в базе данных.Я думаю, что должно быть что-то не так с отправкой массива из внешнего вида.

Во-первых, мои строки динамически генерируются с помощью jquery.Я попытался var_dumping запрос, и он дал мне только первый ряд.Я добавил [] к имени в каждом имени поля ввода.

Некоторые поля ввода в моем представлении

    <td width="15%">
        <select class="form-control select2 item_id" name="item_id[]" required>
            <option></option>
        </select>
    </td>
    <td width="10%">
        <select class="form-control select2 location_id" name="location_id[]"  required>
            <option></option>
        </select>
    </td>
    <td width="20%">
        <input type="text" class="form-control package" name="package[]" required>
    </td>

Контроллер

$receive = new Receive();
    $receive->datetime = $request->datetime;
    $receive->user_id = $request->user_id;
    $receive->truck_id = $request->truck_id;
    $receive->from = $request->from;
    $receive->condition = $request->condition;
    $receive->space = $request->space;
    dd($request->all());
    if($receive->save()) {
        $id = $receive->id;
        foreach($request->item_id as $key=>$it) {
            $data = array('receive_id'=>$id,
                          'item_id'=>$request->item_id [$key],
                          'location_id'=>$request->location_id [$key],
                          'package'=>$request->package [$key],
                          'quantity'=>$request->quantity [$key],
                          'note'=>$request->note [$key],
                           );
            ItemReceive::create($data);
        }
        return back()->with('success', 'Received Items successfully');
    }

    return back()->with('success', 'Received successfully.');

I, за исключением сохранениямассив данных в базу данных, но только первая строка поступает на сервер.

1 Ответ

1 голос
/ 29 апреля 2019

Я бы не хотел вставлять одну запись в БД, однако я бы предпочел создать массив и передать этот массив для вставки, как показано ниже:

попробуйте заменить ваш код следующим:

$now = date('Y-m-d H:i:s');
//you could also try
//$now = Carbon::now();
$arr = [];
foreach($request->item_id as $key=>$it) {
    $arr[] = array('receive_id'=>$id,
                  'item_id'=>$request->item_id[$key],
                  'location_id'=>$request->location_id[$key],
                  'package'=>$request->package[$key],
                  'quantity'=>$request->quantity[$key],
                  'note'=>$request->note[$key],
                  'created_at' => $now,
                  'updated_at' => $now
                );

}

ItemReceive::create($arr);

//make sure you have assigned a correct key in `$fillable` array in your `ItemReceive` model.

Редактировать: 1

Попробуйте добавить multiple, чтобы выбрать:

<select multiple name="bdhdh">
    <option>hdjdjd</option>
</select>
...