我有一个Hotel
模型,它是hasMany
Guests
,它又有两个动态属性,如下所示。
public function getNameAttribute(){
return $this->user->name;
}
public function getEmailAttribute(){
return $this->user->email;
}
现在我更喜欢将它们作为$hotel->guests()->with('user')
获取。现在,当我将其用于Datatable时,我无法获得名称&电子邮件在视图中,原因显而易见。所以我的问题是,我能急切地加载名称&电子邮件属性,以便每当获取guest模型时,所述属性都可用。
请注意,我不返回asArray
或asJson
,因此$attributes
数组的概念不适用(至少据我所知)。
控制器具有以下代码:
return Datatables::of($guests)
->addColumn('email',function($guest){
return $guest->email;
})
->addColumn('name',function($guest){
return $guest->name;
})->make(true);
但是,数据表无法搜索姓名或电子邮件,因为它们在数据库中不可用。
我使用的jquery数据表代码是
$(function() {
$('#guest-table').DataTable({
processing: true,
serverSide: true,
ajax: '{!! route('guests.data') !!}',
columns: [
{ data: 'name', name: 'name', orderable: false },
{ data: 'email', name: 'email', orderable: false},
{ data: 'mobile', name: 'mobile', orderable: false}
]
});
});
我使用Laravel 5
和yajra/laravel-datatables
包
根据Yajra,Laravel文档,您必须以这种方式调用相关模型的属性,
{data: 'relation_name.column', name: 'relationName.column'}
所以在你的情况下会是这样,
{data: 'user.name', name: 'user.name'}
{data: 'user.email', name: 'user.email'}
这里使用双引号,如果此代码在刀片文件中,我将工作
ajax: "{!! route('guests.data') !!}",
如果你有外部js文件,那么像这样使用
在刀片文件中创建隐藏字段
<input type="hidden" id="route_url" value="{!! route('guests.data') !!}">
并且在js文件中通过id 获取路由url
ajax: $("#route_url").val(),