问题描述
我在 Laravel 上尝试 Yajra Datatable,我在教程中找到了这个,我从单个表中获取值。
我必须将第一个表中每列的值与第二个表中的值进行比较,例如第一个表的状态为 1,它将检查状态类型表,其状态的 id 为 1,在本例中为 1 未决,因此数据表将显示“待定”而不是数字 1
下面是控制器的代码:
public function index()
{
$documents = Documents::all();
$status = Status::all();
return view('document/index',compact('documents','status'));
}
public function getDocs(Request $request)
{
if ($request->ajax()) {
$docs = Documents::latest()->get();
return Datatables::of($docs)
->addIndexColumn()
->addColumn('action',function($row){
$actionBtn = '<a href="javascript:void(0)" class="edit btn btn-success btn-sm">Edit</a> <a href="javascript:void(0)" class="delete btn btn-danger btn-sm">Delete</a>';
return $actionBtn;
})
->rawColumns(['action'])
->make(true);
}
}
这里来自文档/索引视图:
$(function () {
var table = $('.yajra-datatable').DataTable({
processing: true,serverSide: true,ajax: "{{ route('documents.list') }}",columns: [
{data: 'id',name: 'id'},{data: 'status',name: 'status'}
]
});
});
解决方法
首先定义状态和文档模型之间的关系
状态模型:
public function docs(){
return $this->hasMany(Documents::class);
}
文档模型:
public function state(){
return $this->belongsTo(Status::class,'status');
# 'status' is the name of foreign key on documents table
}
文档控制器:
public function getDocs(Request $request)
{
if ($request->ajax()) {
$docs = Documents::with('state')->select('documents.*')->latest();
# Here 'documents' is the name of table for Documents Model
# And 'state' is the name of relation on Document Model.
return Datatables::of($docs)
->addIndexColumn()
->addColumn('status_str',function($row){
# 'name' is the field in table of Status Model
return $row->state->name;
})
->addColumn('action',function($row){
$actionBtn = '<a href="javascript:void(0)" class="edit btn btn-success btn-sm">Edit</a> <a href="javascript:void(0)" class="delete btn btn-danger btn-sm">Delete</a>';
return $actionBtn;
})
->rawColumns(['action'])
->make(true);
}
}
索引视图:
$(function () {
var table = $('.yajra-datatable').DataTable({
processing: true,serverSide: true,ajax: "{{ route('documents.list') }}",columns: [
{data: 'id',name: 'id'},{data: 'status_str',name: 'state.name'}
]
});
});