#mysql #laravel #input
#mysql #laravel #ввод
Вопрос:
Это в моем ordered.blade.php
файле. По сути, я хочу сделать так, чтобы при выборе клиента из выпадающего списка автоматически заполнялся адрес, привязанный к идентификатору клиента. Но поскольку очень сложно найти какую-либо документацию по этому вопросу, я застрял. Был бы признателен за любую помощь. Спасибо!
<div class="form-group">
<label for="customerId">Customer Name:</label>
<select onchange="customerId(this.value)" name="customerId" class="form-control">
<option>Choose A Customer</option>
@foreach ($customers as $customer)
<option name="customerId" id="customerId" value="{{$customer->id}}{{$customer->address}}">{{$customer->name}}</option>
@endforeach
</select>
</div>
<div class="form-group">
<label for="shiptoAddress">Ship-To Address (Full Address):</label>
<input name="shiptoAddress" class="form-control" id="shiptoAddress" placeholder="Ship-To Address">
</div>
Это моя функция в моем OrderController для создания нового заказа:
/*Create Order*/
public function create( Request $data){
$order = new Order;
$order->customerId = $data->customerId;
$order->save();
return redirect('orders');
}
Ответ №1:
Похоже, вы используете функцию JavaScript, но она не была включена в этот фрагмент кода, поэтому я изменил функцию, чтобы она выполняла то, что вы просите. Если он что-то делал, вы можете добавить это в новую функцию.
Итак, в основном первое, что я сделал, это изменил некоторые идентификаторы. У вас есть идентификатор, установленный в вашем теге option, который находится внутри цикла, который будет создавать элементы с одинаковым идентификатором для каждого клиента.
Следующее, что я сделал, это изменил значение, которое вы установили для своих параметров, поскольку это выглядело так, как будто пытались сохранить несколько значений, поэтому вместо этого я использовал весь объект customer (который будет сохранен в виде строки).
<div class="form-group">
<label for="customer-select">Customer Name:</label>
<select id="customer-select" onchange="selectCustomer()" name="customer-select" class="form-control">
<option value="default">Choose A Customer</option>
@foreach ($customers as $customer)
<option value="{{ $customer }}">{{$customer->name}}</option>
@endforeach
</select>
</div>
<div class="form-group">
<label for="shiptoAddress">Ship-To Address (Full Address):</label>
<input name="shiptoAddress" class="form-control" id="shiptoAddress" placeholder="Ship-To Address">
</div>
Установив весь объект customer в качестве значения параметра, вы будете иметь доступ к любым другим частям клиента, если вам понадобится что-то с ними сделать в будущем (т.Е. используйте идентификатор клиента, чтобы сделать что-то еще).
Теперь для JavaScript я использовал необработанный JavaScript (вы можете изменить его на jQuery, если он у вас есть), чтобы получить значение вашего Customer Select
и применить его к вашему Address Input
Затем я использовал JavaScript, чтобы получить значение вашего оператора select и сделал его значением вашего поля ввода. JSON.parse(...)
Вызов преобразует строку customer (как упоминалось ранее) в пригодный для использования объект JavaScript.
<script>
function selectCustomer() {
let select = document.getElementById('customer-select');
let ship_to_address = document.getElementById('shiptoAddress');
if(select.value === 'default') {
ship_to_address.value = '';
} else {
ship_to_address.value = JSON.parse(select.value).address;
}
}
</script>
В будущем, если у вас есть несколько ключей в вашем $customer->address
, вы могли бы использовать тот же подход для установки разных значений отдельных входных данных для каждой части вашего адреса. Например:
...
let address = JSON.parse(select.value).address;
street_1.value = address.street_1;
city.value = address.city;
...
Комментарии:
1. Только что понял одну проблему: он отправляет адрес отправки в базу данных, но не отправляет имя клиента. Пытаюсь поработать с ним, чтобы заставить его работать, но мне интересно, есть ли у вас какие-либо советы.
2. @DevMatt Вы должны быть в состоянии устранить эту проблему в своем контроллере, используя
json_decode(..., true);
имя формы «выбор клиента», через которое мы проходим, которое содержит весь объект customer. Это превратит строку в массив, который мы могли бы затем использовать, чтобы получить имя клиента для передачи в базу данных. Если вы хотите, я могу направить вас дальше, если вы опубликуете метод, отвечающий за хранение вашего ресурса.3. Абсолютно! Хотя я не совсем уверен, что вы подразумеваете под «методом хранения вашего ресурса».
4. @DevMatt Я просто имею в виду функцию, ответственную за хранение данных формы в вашей таблице, обычно это находится в
Controller
и вызываемая функция:store() {...}
5. Позвольте мне добавить контроллер к моему вопросу. Однако у меня нет функции сохранения.