【发布时间】:2019-04-17 18:11:57
【问题描述】:
我正在尝试以 Country -> State -> Municipality 的方式以一种依赖于上述形式的一组 3 个选择框。
我正在关注this tutorial,它成功获取数据并填充了第一个选择框(在本例中为国家/地区)。
问题是在那个教程中数据在一个表中,而在我的应用程序中它在多个表中。
我想知道 如何从与上面选择框中所选项目的 id 对应的多个表中获取数据?但是以 LARAVEL 的方式?
我的 HTML(全部基于上面链接的教程):
{{-- Muestra los estados sacados de la base de datos. --}}
<div id="inputs-estado">
<div class="form-group">
{{-- Estados --}}
<label for="">Estado</label>
<select name="state" id="state" class="form-control dynamic" data-dependant="state">
@foreach ($estados as $estado)
<option value="{{ $estado->state }}">{{ $estado->state }}</option>
@endforeach
</select>
<br>
{{-- Municipio/Delegación --}}
<label for="">Ciudad</label>
<select name="state" id="state" class="form-control dynamic" data-dependant="city">
<option value="">Selecciona la ciudad</option>
</select>
<br>
{{-- Colonia --}}
<label for="">Municipo</label>
<select name="state" id="state" class="form-control dynamic" data-dependant="municipality">
<option value="">Selecciona el municipio</option>
</select>
</div>
</div>
JS:
formDynamic.change(function () {
if ($(this).val() != '') {
let select = $(this).attr('id');
let value = $(this).val();
let dependent = $(this).data('dependent');
let _token = $('input[name="_token"]').val();
$.ajax({
url: "{{ route('postscontroller.fetch') }}",
method: "POST",
data: {
select: select,
value: value,
_token: _token,
dependent: dependent
},
success: function (result) {
$('#' + dependent).html(result);
}
})
}
});
控制器:
public function create()
{
// Toma los estados de la base de datos.
$estados = DB::connection('db_postalcodes')
->table('state')
->groupBy('state')
->get();
// El with hace que se adjunten variables al view.
return view('admin.posts.create')->with('estados', $estados);
}
public function fetch(Request $request)
{
$state_id = DB::connection('db_postalcodes')->table('city')->get();
$select = $request->get('select');
$value = $request->get('value');
$dependent = $request->get('dependent');
$data = DB::connection('db_postalcodes')
->table('city')
->where($select, $state_id->state_id)
->groupBy($dependent)
->get();
$output = '<option value="">Select '.ucfirst($dependent).'</option>';
foreach($data as $row){
$output .= '<option value="'.$row->$dependent.'">'.$row->$dependent.'</option>';
}
echo $output;
}
Routes.php
Route::group(['prefix' => 'admin', 'namespace' => 'Admin', 'middleware' => 'auth'], function () {
Route::get('/', 'AdminController@index')->name('admin');
Route::get('posts', 'PostsController@index')->name('admin.posts.index');
Route::get('posts/create', 'PostsController@create')->name('admin.posts.create');
Route::post('posts/create', 'PostsController@fetch')->name('postscontroller.fetch');
Route::post('posts', 'PostsController@store')->name('admin.posts.store');
});
我的桌子:
【问题讨论】:
-
你需要定义你引用的表,要么使用 ajax 调用中的参数,以便后端控制器知道要引用哪个表,要么通过其他方式
标签: javascript php mysql ajax laravel