laravel - 具有 3 组值的 Laravel Yajra Datatables 排序列
问题描述
我已经为所有评论成功实施了 yajra 数据表。一条评论可以有 3 种状态:Approved
、Pending
、Blocked
。
我在数据表上有一个名为的列Status
,我想按状态对列进行排序。默认情况下,状态的范围是 perApproved
而Declined
不是 for Pending
。
有什么办法可以让我通过在这 3 个状态上路由来对这一列进行排序?
我确定我的问题有一些editColumn
或filterColumn
方法,但我在任何地方都找不到。
为了@andrewjames 的快乐,我在这里添加了一些不必要的代码:
public function indexDataService()
{
$reviews = DB::table('reviews')
->join('users', 'reviews.user_id', '=', 'users.id')
->join('statuses', 'reviews.status_id', '=', 'statuses.id')
->join('products', 'reviews.product_id', 'products.id')
->join('categories', 'reviews.category_id', 'categories.id')
->select([
'reviews.*',
'reviews.created_at AS created_at',
'statuses.title AS status',
DB::raw('CONCAT(users.first_name, " ", users.last_name) AS full_name'),
'products.title',
DB::raw('categories.title as category'),
])
->where('reviews.deleted_at', '=', NULL);
return Datatables::of($reviews)
->addColumn('action', function($review){
return view('admin/reviews/reviews_actions', compact('review'));
})
->editColumn('created_at', function ($review) {
$formatedDate = Carbon::createFromFormat('Y-m-d H:i:s', $review->created_at)->format('d-m-Y');
return $formatedDate;
})
->filterColumn('full_name', function ($query, $keyword) {
$keywords = trim($keyword);
$query->whereRaw("CONCAT(first_name, last_name) like ?", ["%{$keywords}%"]);
})
->filterColumn('category', function ($query, $keyword) {
$keywords = trim($keyword);
$query->whereRaw("categories.title like ?", ["%{$keywords}%"]);
})
->make(true);
}
刀片上:
<script>
$('#category-reviews-table tfoot th').each( function () {
var title = $(this).text();
$(this).html( '<input type="text" placeholder="'+title+'" />' );
} );
$(function() {
$('#category-reviews-table').DataTable({
"sDom":"ltipr",
processing: false,
serverSide: true,
"language": {
"url": "//cdn.datatables.net/plug-ins/9dcbecd42ad/i18n/Italian.json"
},
ajax: '{{ route('admin.reviews.data') }}',
columnDefs: [
{"className": "dt-center", "targets": "_all"},
{
targets: [1],
render: function ( data, type, row ) {
return type === 'display' && data.length > 10 ?
data.substr( 0, 20 ) +'…' :
data;
}
}
],
columns: [
{ data: 'full_name', name: 'full_name' },
{ data: 'title', name: 'products.title' },
{ data: 'category', name: 'category'},
{ data: 'no_yes', name: 'reviews.no_yes', searchable:false },
{ data: 'status', name: 'status', searchable:false,
render: function( data, type, full, meta ) {
if (data === 'In attessa') {
return "<span class=\"badge badge-warning\">In attessa</span>";
} else if (data === 'Approvata') {
return "<span class=\"badge badge-success\">Approvata</span>";
} else if (data === 'Rifiutata') {
return "<span class=\"badge badge-danger\">Rifiutata</span>";
}
}
},
{ data: 'created_at', name: 'reviews.created_at', searchable:false },
{ data: 'action', name: 'action', orderable: false, searchable:false }
],
initComplete: function () {
this.api().columns().every( function () {
var that = this;
$( 'input', this.footer() ).on( 'keyup change clear', function () {
if ( that.search() !== this.value ) {
that
.search( this.value )
.draw();
}
} );
} );
},
});
});
谁能给我一些例子如何实现它?
解决方案
推荐阅读
- java - 嵌套 Recyclerview 中的自定义对话框
- docker - 当调用“在容器中重新打开”时,如何在不重新启动自身并丢失 shell 设置的情况下“在容器中”打开 VS 代码?
- jquery - 在 laravel 中使用 DataTable 和 Ajax
- java - 无法解决 java.lang.ClassNotFoundException
- php - 使用 libsodium 函数的 php 加密不可用
- node.js - 使用 Sequelize-cli 创建模型时令牌无效或意外
- excel - 宏正在追溯影响工作表
- angular - Angular 自定义库 - 不是函数错误
- javascript - 未捕获的 ReferenceError:postAcmgForm 未在 HTMLButtonElement.onclick 中定义
- amazon-web-services - 在红移卸载查询中传递日期参数