2016-07-25 220 views
1

我有一个Hotel模型,其中hasManyGuests,它又具有两个动态属性,如下所示。在Laravel for jQuery Datatable中的动态加载动态属性

public function getNameAttribute(){ 
    return $this->user->name; 
} 

public function getEmailAttribute(){ 
    return $this->user->email; 
} 

现在我更愿意将它们取为$hotel->guests()->with('user')。现在,当我将它用于Datatable时,出于显而易见的原因,我无法在视图中获得名称&电子邮件。所以我的问题是,我能否急于加载名称&电子邮件属性,以便每当访客模型获取时,所述属性都可用。

请注意,我不会将其返回asArrayasJson,因此$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 5yajra/laravel-datatables包这里

回答

1

为每Yajra,Laravel文件,你必须调用相关模型的财产这样一来,

{data: 'relation_name.column', name: 'relationName.column'} 

所以在你的情况下,它会是这样,

{data: 'user.name', name: 'user.name'} 
{data: 'user.email', name: 'user.email'} 
0

用户双引号,如果这个代码是刀片文件中我会努力

ajax: "{!! route('guests.data') !!}", 

如果你有外部的js文件,然后像这样使用

创建刀片文件的隐藏字段

<input type="hidden" id="route_url" value="{!! route('guests.data') !!}"> 

而在js文件上路线网址由ID

ajax: $("#route_url").val(),