Laravel. Выборка записей с параметром из формы
Всем привет!
Можете помочь с выборкой записей по параметру, который выбирается из шаблона.
Имеются две таблицы со связью 1(Типы_Неисправности) ко М(Неисправности),
На форме (blade-template) размещены два списка(select).
При выборе типа_неисправности в первом списке,
во 2м списке должны быть доступны записи о неисправностях,
которые принадлежат к типу_неисправности, выбранного из 1го списка.
// модель Type
public function defects() {
return $this->hasMany('App\Models\Defect');
}
// модель Defect
public function type()
{
return $this->belongsTo('App\Models\Type');
}
// записи о типах_неисправности
$types = Type::get();
// выборка записей по заданному id типа_неисправности
$defects = DB::table('defects')->where('type_id', 4)->get();
// вывод записей для 1го списка(Типы_Неисправности)
<select>
@foreach($types as $type)
<option value="{{ $type->id }}">
{{ $type->name }}
</option>
@endforeach
</select>
Как изменить выборку на динамический id? И как применить этот id в шаблоне чтобы вывести записи во 2м списке, после выбора типа неисправности из 1го списка?
Ответы (2 шт):
Первую выборку необходимо вставить в форму, после нажатия кнопки во второй выборке появятся данные
<form method = "get">
<select name = "type_id">
<option disabled selected>Выберите тип</option>
@foreach($types as $type)
<option value = "{{ $type->id }}">
{{ ucfirst($type->name) }}
</option>
@endforeach
</select>
<button type = "submit">Выбрать</button>
</form>
Также передаем во вторую форму type_id
<form method = "get">
<input type = "hidden" name = "type_id" value = "{{ $request->type_id }}">
<select name = "defect_id">
<option disabled selected>Выберите неисправность</option>
@foreach($defects as $defect)
<option value = "{{ $defect->id }}" >
{{ ucfirst($defect->desc) }}
</option>
@endforeach
</select>
<button type = "submit">Отправить</button>
</form>
Для обновления информации без перезагрузки страницы, вам нужно использовать js
Можно попробовать сделать так:
Добавляем новый путь
Route::get('/defect/get', 'DefectController@defectGet')->name('defect.get');
В кнотроллер Defect добавляем
public function defectGet(Request $request) {
$id = $request->input('id');//Получаем id
$rez['rez'] = 0;//Делаем по дефолту 0
if($id) {//Проверяем пришел ли id
$defects = Defect::where('type_id', $id)->get();//Делаем запрос на получения
if($defects) {//Проверяем есть или нет неисправности
$option = '<option disabled selected>Выберите неисправность</option>';//Первый оптион по дефолту выбор
foreach ($defects as $defect) {//Перебираем все неисправности
$option .= ' <option value="'.$defect->id.'" >'.$defect->desc.'</option>';//И добавляем их в переменную
}
$rez = [
'rez' => 1,
'option' => $option
];
}
}
return $rez;//Выводим результат
}
Во вью
<select name="type_id" id="type">
<option disabled selected>Выберите тип</option>
@foreach($types as $type)
<option value="{{ $type->id }}">
{{ ucfirst($type->name) }}
</option>
@endforeach
</select>
<select name="defect_id" id="defect">
</select>
<script>
$(document).ready(function(){//Ждем полной загрузки страницы
$('#type').change(function() {//Отслеживаем изменения Типа
let id = $(this).val();//Помещаем в переменную, полученное значение из Типа
if (id) {//Проверяем есть ли оно
axios({//Отправляем get запрос
method: 'get',
url: '/defect/get',
params: {id}
}).then((response) => {
if(response.data.rez) {//Проверяем ответ 1 или 0
$('#defect').html(response.data.option);//Если пришел 1, то вставляем option в Неисправность
}
});
}
return false;
});
});
</script>