我已为所有评论成功实施了 yajra 数据表。一篇评论可以有 3 种状态:Approved
、Pending
、Blocked
。
我在数据表上有一列名为 Status
,我想按状态对列进行排序。默认情况下,状态按照 Approved
和 Declined
而不是 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();
}
} );
} );
},
});
});
谁能给我一些如何实现它的例子?