клонировать таблицу с помощью jquery и вставлять ее данные в базу данных

#jquery #laravel

#jquery #laravel

Вопрос:

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

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

мое мнение

         function addRow() {
        //copy the table row and clear the value of the input, then append 
 the row to the end of the table
        $("#formTable tbody tr:first").clone().find("input").each(function 
  () {
            $(this).val('');
        }).end().appendTo("#formTable");
        $("#removeclone").removeAttr("disabled");

    };
</script>
<div id="Home" style="width: 60%; margin: 0px auto;"></div>

<form method="post" action="insertrequest">
    @csrf
    <table id="formTable" >
        <thead>
            <td>Quantity</td>
            <td>Unit</td>
            <td>Description</td>
            <td>Remarks</td>
        </thead>
        <tr>
            <td><input type="text" name="quantity" id="quantity"></td>
            <td><select name="units_id" id="units_id">
                    @foreach($unit as $units)
                        <option value="{{$units->id}}">{{$units->unit_name}}</option>
                    @endforeach
                </select></td>
            <td><input type="text" name="description" id="description"></td>
            <td><input type="text" name="remarks" id="remarks"></td>
        </tr>
    </table>
    <input type="submit" value="submit">
</form>
<input value="addrow" type="button" id="addrow" onclick="javascript: addRow();">
  

Мой маршрут

 Route::Post('insertrequest','Home@insertrequest');
  

и мой контроллер

     public function insertrequest(Request $requset)
{
    $quantity[]=$requset->input('quantity');
    $units_id[]=$requset->input('units_id');
    $description[]=$requset->input('description');
    $requster='1';
    $remarks[]=$requset->input('remarks');
    for($i = 0; $i < count($quantity); $i  )
    {
        DB::insert('insert into procurment_requests (quantity,units_id,description,`requster`,remarks) 
        values(?,?,?,?,?)',
            [$quantity[$i],$units_id[$i],$description[$i],$requster[$i],$remarks[$i]]);
    }


}
  

введите описание изображения здесь

Ответ №1:

У вас есть ряд вещей, которые препятствуют сохранению всех записей. Когда вы клонируете строку, вы клонируете один элемент выбора опции. Клонируемый элемент, как и первый, позволит передать на сервер только один ответ.

Кроме того, при клонировании, я полагаю, вы клонируете новое поле выбора, но с тем же именем и идентификатором в новую строку. Отправитель увидит только одно из них. (Плюс в dom будут совпадения).

Я не думаю, что это сработает, учитывая вашу текущую архитектуру. Я бы предложил, возможно, клонировать параметры одного поля выбора вместо целой строки. Найдите SO простой способ сделать это. Затем сделайте ее множественным выбором ( <select name="units_id[]" multiple...etc> ).

Затем пользователь может выбрать столько опций, сколько захочет, и они будут отправлены в виде массива.

На стороне вашего сервера измените

 $units_id[]=$requset->input('units_id');
  

Для:

 $units_ids=$requset->input('units_id');
  

То, как у вас это есть, даст вам только одну запись, а не массивы — это так не работает. Затем у вас есть массив внутри этой unit_ids переменной, который вы можете использовать.

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

Не уверен, что вы сможете работать с этим немного другим способом, но я думаю, вы будете рвать на себе волосы, пытаясь заставить работать другой способ.

HTH

Комментарии:

1. Я сделал то же самое в asp.net mvc там работал нормально, но я новичок в laravel, и мне не удалось получить массив в моем контроллере

2. Чтобы получить несколько выборок в одной форме, вы должны, по крайней мере, назвать их по-разному / diff ids. Затем вам нужно будет обработать разные имена на стороне контроллера аналогично тому, что у вас было: unit_id[] = $request->get('unit_id1') , unit_id[] = $request->get('unit_id2') и т.д. Это сработает, но не так чисто, как при множественном выборе. Но, это может быть лучше для ваших нужд 🙂