#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')
и т.д. Это сработает, но не так чисто, как при множественном выборе. Но, это может быть лучше для ваших нужд 🙂