我在 Mysql 数据库上使用 laravel 和包:yajra/laravel-datatables-oracle。我还使用 mcamara/laravel-localization 包来管理网站的不同语言。
下面雄辩的代码显示了一个 datatables.js 表:数据正确并且搜索引擎工作。但是,我无法对我的列应用订单。事实上,数据表允许您按升序/降序过滤列,但它不起作用。
我的字段中的数据:free_videos.title 和categories.title 作为类别,采用 JSON 格式({"en": "My title", "fr": "Mon titre"}。
我已经在各个方向上尝试过filterColumn,但是当我单击相关列的标题时,我无法设法按升序或降序排列我的列:显示指示显示顺序更改的箭头并更改状态,但数据没有被过滤。
Laravel 代码:
public function active(Request $request)
{
$query = FreeVideo::query()->leftJoin('categories', 'free_videos.category_id', '=', 'categories.id')->select('free_videos.id', 'free_videos.title', 'categories.id as category_id', 'categories.title as category');
return DataTables::eloquent($query)
->addColumn('freeVideoTitle', function($row){
return $row->title; //Json table default lang : "fr" provided ("mcamara/laravel-localization")
})
->editColumn('freeVideoCategory', function($row)
{
$category = json_decode($row->category, true);
return isset($category['fr']) ? $category['fr'] : '';
})
->editColumn('languages', function($row){
return $row->getTranslations('title');
})
->addColumn('actions', function($row) use ($request){
$actions['edit'] = ['status' => 1, 'route' => route('backend.freeVideos.edit', $row->id)];
$actions['destroy'] = ['status' => 1, 'route' => route('backend.freeVideos.destroy', $row->id)];
return $actions;
})
->make(true);
}
Javascript代码:
table.DataTable({
language: {url: '/assets/common/js/locales/datatable/fr.json'},
dom:
"<'row'" +
"<'col-sm-6 d-flex align-items-center justify-conten-start'l>" +
"<'col-sm-6 d-flex align-items-center justify-content-end'f>" +
">" +
"<'table-responsive'tr>" +
"<'row'" +
"<'col-sm-12 col-md-5 d-flex align-items-center justify-content-center justify-content-md-start'i>" +
"<'col-sm-12 col-md-7 d-flex align-items-center justify-content-center justify-content-md-end'p>" +
">",
responsive: true,
searchDelay: 500,
processing: true,
serverSide: true,
pageLength: 50,
ajax: ajaxProcessing,
columns: [
{
data: 'freeVideoTitle',
name: 'free_videos.title'
},
{
data: 'freeVideoCategory',
name: 'categories.title'
},
{
data: 'languages',
name: 'langs'
},
{
data: 'actions',
responsivePriority: -1
},
],
order: [[0, 'desc']], ...
已修复!
public function active(Request $request)
{
$query = FreeVideo::query()->leftJoin('categories', 'free_videos.category_id', '=', 'categories.id')->select('free_videos.id', 'free_videos.title', 'categories.id as category_id', 'categories.title->fr as category');
return DataTables::eloquent($query)
->addColumn('freeVideoTitle', function($row){
return $row->title;
})
->addColumn('freeVideoCategory', function($row){
return $row->category;
})
->editColumn('languages', function($row){
return $row->getTranslations('title');
})
->addColumn('actions', function($row) use ($request){
$actions['edit'] = ['status' => 1, 'route' => route('backend.freeVideos.edit', $row->id)];
$actions['destroy'] = ['status' => 1, 'route' => route('backend.freeVideos.destroy', $row->id)];
return $actions;
})
->make(true);
}
columns: [
{
data: 'freeVideoTitle',
name: 'free_videos.title->fr'
},
{
data: 'freeVideoCategory',
name: 'categories.title->fr'
},
{
data: 'languages',
name: 'langs'
},
{
data: 'actions',
responsivePriority: -1
},
],