我的项目(在Laravel 5中内置)中使用DataTable Bootstrap Jquery呈现的表有问题。
搜索(过滤)适用于从SQL查询生成的列,但是使用add_column生成的列不起作用。
来自php文件的javascript代码:
var oTable;
$(document).ready(function() {
oTable = $('#table').dataTable({
"sDom" : "<'row'<'col-md-6'l><'col-md-6'f>r>t<'row'<'col-md-6'i><'col-md-6'p>>",
"sPaginationType" : "bootstrap",
"bProcessing" : true,
"bServerSide" : true,
"sAjaxSource" : "{{ URL::to('employee/outputs/data/'.$invoice_status) }}",
"fnDrawCallback" : function(oSettings) {
$(".iframe").colorbox({
iframe : true,
width : "60%",
height : "60%",
onClosed : function() {
window.location.reload();
}
});
}
});
});
Laravel Controller的代码:
public function data($invoice_status)
{
$outputs = Output::join('my_companies', 'my_companies.id', '=', 'outputs.my_company_id')
->join('my_branches', 'my_branches.id', '=', 'outputs.my_branch_id')
->select(array('outputs.id', 'my_companies.name as my_company_name', 'my_branches.name as my_branch_name', 'outputs.output_at', 'outputs.invoice_id', 'outputs.customer_type'))
->where('outputs.invoice_status', $invoice_status)
->where('outputs.is_deleted', false)
->orderBy('outputs.output_at', 'DESC');
return Datatables::of($outputs)
->add_column('customer_name', '{{ App\Output::getCustomerName(App\Output::find($id)->customer_type,App\Output::find($id)->customer_id) }}')
->add_column('auto', '{{ App\Output::find($id)->vehicle_number }}')
->add_column('observations', '{{ App\Output::find($id)->observations }}')
->make();
}
更新
在我的情况下,我了解我无法在添加了ad_column的列中进行搜索。所以,我想从Model中实现函数,比如SELECT区域中的App \ Output_Detail :: getAmountDue。 我试过DB:RAW。它不起作用,语法是正确的,但在网页上没有结果:
$outputs = Output::join('my_companies', 'my_companies.id', '=', 'outputs.my_company_id')
->join('my_branches', 'my_branches.id', '=', 'outputs.my_branch_id')
->select(array('outputs.id', 'my_companies.name as my_company_name', 'my_branches.name as my_branch_name', 'outputs.output_at', 'outputs.invoice_id', 'outputs.customer_type'), DB::RAW(":amount as amount_due",array('amount' => App\Output_Detail::getAmountDue($id))))
->where('outputs.invoice_status', $invoice_status)
->where('outputs.is_deleted', false)
->orderBy('outputs.output_at', 'DESC');