У меня есть информация о пациентах в базе данных, теперь я хочу получить доступ к своей информации в другой форме. Когда я введу идентификатор пациента, поле имени пациента должно быть заполнено / загружено автоматически. У меня тоже есть модель пациента.
Это из ...
<form method = "post" class = "" action = "" >
@csrf
<div class = "input-field col s3">
<input name = "patient_id" id = "id" type = "text" class = "validate">
<label class = "active" for = "id">Patient ID</label>
</div>
<div class = "input-field col s9">
<input name = "patient_name" id = "name" type = "text" class = "validate">
<label class = "active" for = "name">Patient Name</label>
</div>
<div class = "input-field col s12">
<select name = "room">
<option value = "" disabled selected>Select Room</option>
<option value = "2001">ROOM 2001 - Non AC - 500</option>
<option value = "4001">ROOM 4001 - AC -800</option>
<option value = "301">CABIN 301 - AC - 1700</option>
</select>
</div>
<div class = "input-field col s12 text-center">
<button class = "btn waves-effect waves-light" type = "submit" name = "action">Assign Room</button>
</div>
</form>






Ты можешь
создайте объект json в шаблоне лезвия, который может быть немного беспорядочным, если присутствуют специальные символы. Кроме того, я не считаю это хорошим решением, если у вас много записей.
Я бы использовал библиотеку, например https://select2.org/, вы будете искать здесь https://select2.org/data-sources/ajax ... я лично использую этот https://semantic-ui.com/modules/search.html#/examples ... но я думаю, что select2 более прямолинейный.
Внизу https://select2.org/data-sources/ajax вы можете увидеть, как объект с полными данными может быть передан при запросе к серверу.
Поскольку имя предназначено только для поиска идентификатора (я предполагаю)
Вы также можете настроить свой контроллер так, чтобы он выглядел в CONCAT (id, name), чтобы пользователь мог ввести идентификатор или имя и найти пациента.
Я сначала удалил ответ, потому что думал, что совершенно не по теме ... но я думаю, что это может быть полезно ...
Передайте данные пациента в view через compact и используйте значения коллекции patient соответственно в полях ввода.
контролер
public function edit($id){
$patient = Patient::find($id);
return view('patients.edit, compact('patient'))
}
В представлении
<input value = "{{ old('name') ? old('name') : $patient->name }}" name = "name" type = "text" class = "form-control" required>
вы можете попробовать это.
Выполните JavaScript, когда вы вводите идентификатор пациента в поле ввода:
вот пример -> https://www.w3schools.com/tags/tryit.asp?filename=tryhtml5_ev_oninput
HTML
<input name = "patient_id" id = "id" type = "text" class = "validate" oninput = "myFunction()">
Javascript
function myFunction() {
var p_id = document.getElementById("id").value;
$.ajax({
url: '{{URL::to('get_patient_name')}}'+ '/'+p_id,
type: "get",
success: function (data) {
}
});
}
Теперь сделайте один маршрут:
Route::get('get_patient_name/{p_id}', 'PatientController@getPatientName'});
В контролер получить имя пациента
public function getPatientName($id)
{
return ModelName::where('patient_id',$id)->value('patient_name');
}
и, наконец, напечатайте имя пациента в поле ввода имени.
в функции успеха javascript
success: function (data) {
$('#name').val(data);
}
<input name = "patient_id" onkeydown = "getInfo(this)" id = "id" type = "text" class = "validate">
<script type = "text/javascript">
function getInfo(input){
var xhr = new XMLHttpRequest();
xhr.open("GET", 'your/url/to/get/info/from/db/'+input.value, true);
xhr.setRequestHeader('Content-Type', 'application/json');
xhr.send();
xhr.onload = function() {
var data = JSON.parse(this.responseText);
document.getElementById('name').value = data.name;
document.getElementById('room').innerHTML= '<option value = "'+
data.room +'">'+data.room +'</option>';
data.name
}}
Если вы хотите сделать это без использования jquery, вот vanilla js
не забудьте изменить URL-адрес запроса!
document.querySelector("#id").addEventListener("change", function () {
let xml = new XMLHttpRequest(),
token = document.querySelector("input[name=_token]").value,
id = document.querySelector("#id").value,
name = document.querySelector("#name");
xml.open("get", "get/" + id); // change url
xml.setRequestHeader("X-CSRF-TOKEN", token);
xml.onreadystatechange = function () {
if (xml.readyState === 4) {
var response = JSON.parse(xml.responseText);
if (xml.status === 200 ) {
name.value = response
} else {
console.info('something bad happened');
}
}
};
xml.send()
})
Затем в вашем контроллере найдите пациента и отправьте обратно
public function getPatient($id){
$patient = Patient::find($id);
return response()->json($patient->name);
}
покажи свой код.