【发布时间】:2020-10-12 08:10:14
【问题描述】:
我刚刚关注了一个 YouTube 教程,导师做了一些与我想要的类似的事情 教程链接:Laravel 5.8 - Custom Search in Datatables using Ajax
在教程中,导师使用 Datatable 加载所有数据并显示所有过滤结果。
我需要有自己的自定义设计,我可以在其中添加@foreach 并自定义设计, 我不知道我该怎么做我尝试了很多方法,但我失败了。
有人可以建议我一个解决方案,或者建议我遵循任何教程,以便我可以根据需要将过滤后的数据加载到我的视图中。
这是我的stores.blade.php,搜索字段和表格在哪里,
<h3 align="center">Store Locator</h3>
<div class="row">
<div class="col-md-4"></div>
<div class="col-md-4">
<div class="form-group">
<select name="filter_district" id="filter_district" class="form-control" required>
<option value="">Select Distric</option>
@foreach ($district_name as $district)
<option value="{{ $district->district }}">{{ $district->district }}</option>
@endforeach
</select>
</div>
<div class="form-group">
<select name="filter_outlet" id="filter_outlet" class="form-control" required>
<option value="">Select Outlet</option>
@foreach($outlet_name as $country)
<option value="{{ $country->outlet }}">{{ $country->outlet }}</option>
@endforeach
</select>
</div>
<div class="form-group" align="center">
<button type="button" name="filter" id="filter" class="btn form-submit">Filter</button>
<button type="button" name="reset" id="reset" class="btn form-submit">Reset</button>
</div>
</div>
<div class="col-md-4"></div>
</div>
<br />
<div class="table-responsive">
<table id="store_data" class="table table-bordered table-striped">
<thead>
<tr>
<th>ID</th>
<th>Outlet</th>
<th>Province</th>
<th>District</th>
<th>Number 1</th>
<th>Number 2</th>
<th>Number 3</th>
<th>Address</th>
</tr>
</thead>
</table>
</div>
这是stores.blade.php中的脚本
<script>
$(document).ready(function(){
fill_datatable();
function fill_datatable(filter_district = '', filter_outlet = '')
{
var dataTable = $('#store_data').DataTable({
processing: true,
serverSide: true,
ajax:{
url: "{{ route('store-locatorr.index') }}",
data:{filter_district:filter_district, filter_outlet:filter_outlet}
},
columns: [
{
data:'id',
name:'id'
},
{
data:'outlet',
name:'outlet'
},
{
data:'province',
name:'province'
},
{
data:'district',
name:'district'
},
{
data:'no1',
"render": function(data, type, row, meta) {
if (type === 'display') {
data = '<a class="gray" href="tel:' + data + '">' + data + '</a>';
}
return data;
},
name:'no1'
},
{
data:'no2',
"render": function(data, type, row, meta) {
if (type === 'display') {
data = '<a class="gray" href="tel:' + data + '">' + data + '</a>';
}
return data;
},
name:'no2'
},
{
data:'no3',
"render": function(data, type, row, meta) {
if (type === 'display') {
data = '<a class="gray" href="tel:' + data + '">' + data + '</a>';
}
return data;
},
name:'no3'
},
{
data:'address',
name:'address'
}
]
});
}
// $('#filter_outlet').on('change',function(){
$('#filter').click(function(){
var filter_district = $('#filter_district').val();
var filter_outlet = $('#filter_outlet').val();
if(filter_district != '' && filter_district != '')
{
$('#store_data').DataTable().destroy();
fill_datatable(filter_district, filter_outlet);
}
else
{
alert('Select Both filter option');
}
});
$('#reset').click(function(){
$('#filter_district').val('');
$('#filter_outlet').val('');
$('#store_data').DataTable().destroy();
fill_datatable();
});
});
</script>
这是我的模型
<?php
namespace App;
use Illuminate\Database\Eloquent\Model;
class Store extends Model
{
protected $table = 'stores';
}
这是我的 StoreLocatorController.php
<?php
namespace App\Http\Controllers;
use Illuminate\Http\Request;
use App\Store;
class StoreLocatorController extends Controller
{
function index(Request $request)
{
if(request()->ajax())
{
if(!empty($request->filter_district))
{
$data = Store::select('id','outlet', 'province', 'district', 'no1', 'no2', 'no3', 'address')
->where('district', $request->filter_district)
->where('outlet', $request->filter_outlet)
->get();
}
else
{
$data = Store::select('id','outlet', 'province', 'district', 'no1', 'no2', 'no3', 'address')
->get();
}
return datatables()->of($data)->make(true);
}
$outlet_name = Store::select('outlet')
->groupBy('outlet')
->orderBy('outlet', 'ASC')
->get();
$district_name = Store::select('district')
->groupBy('district')
->orderBy('district', 'ASC')
->get();
return view('test.stores', compact('outlet_name','district_name'));
// $count = Store::orderBy('id')->where('district','Kandy')->count();
// $store = Store::orderBy('id','asc')->get();
// return view("test.stores")->with('store',$store)->with('count',$count);
// return view("test.stores");
}
}
这是我的网络路线
Route::resource('/store-locatorr', 'StoreLocatorController');
我只是想知道如何显示从数据库加载到表中以加载到 foreach 中的结果,以便我可以设计我想要的方式,同时搜索功能按原样工作, 有人可以帮助我吗,或者请给我一些可以解决此问题的建议,
【问题讨论】:
标签: php ajax laravel laravel-5 eloquent