2017-07-18 20 views
0

我使用this repo作为我的项目的起点。Laravel 5.4获取相关数据并显示

我有一个user表和clubs表。 User可以有一个俱乐部,club连接到一个user

因此,我在下面的clubs表中定义了hasOne关系。

public function user() 
{ 
    return $this->hasOne(User::class, 'id', 'user_id'); 
} 

clubs表有user_id列。

我无法在我的index页面上获取正确的数据以显示UseruserName

我正在使用ClubsRepository来显示数据。

下面是它的代码。

public function __invoke(ManageClubRequest $request) 
{ 
    return Datatables::of($this->clubs->getForDataTable()) 
     ->escapeColumns(['clubName', 'sort']) 
     ->addColumn('user', function ($clubs) { 
      return $clubs->user->pluck('first_name'); 
     }) 
     ->addColumn('actions', function ($clubs) { 
      return $clubs->action_buttons; 
     }) 
     ->withTrashed() 
     ->make(true); 
} 

在下面库是我的 'getFromDataTable()' 方法

public function getForDataTable() 
{ 
    return $this->query() 
     ->with('user') 
     ->select([ 
      'clubs.id', 
      'clubs.clubName', 
      'clubs.description', 
      'clubs.user_id', 
      'clubs.created_at', 
      'clubs.updated_at', 
     ]); 
} 

index.blade代码如下

<table id="clubs-table" class="table"> 
    <tr> 
     <th>clubName</th> 
     <th>description</th> 
     <th>userName</th> 
     <th>created</th> 
     <th>last_updated</th>   
    </tr> 
</table> 

<script> 
    $(function() { 
     $('#clubs-table').DataTable({ 
      dom: 'lfrtip', 
      processing: false, 
      serverSide: true, 
      autoWidth: false, 
      ajax: { 
       url: '{{ route("admin.access.clubs.get") }}', 
       type: 'post', 
       data: {status: 1, trashed: false}, 
       error: function (xhr, err) { 
        if (err === 'parsererror') 
         console.log(err); 
       } 
      }, 
      columns: [ 
       {data: 'clubName', name: 'clubs.clubName'}, 
       {data: 'description', name: 'clubs.description'}, 
       {data: 'user', name: 'user.first_name', sortable:false}, 
       {data: 'created_at', name: 'clubs.created_at'}, 
       {data: 'updated_at', name: 'clubs.updated_at'} 
      ], 
     }); 
    }); 
</script> 

我到底做错了什么?

+0

@AaronFahey试过,但它不起作用。 –

回答

0

试试这个查询来获取用户与他们的俱乐部数据

User::with(array('clubs' => function($q) { 
    }))->get(); 
0

你好像用错了那种关系 - 如果俱乐部表有一个user_id列,这意味着它belongs to的用户,而不是它是has one用户。

假设每个用户可以拥有多个俱乐部,你想要的是

// in the User model 
public function clubs() 
{ 
    return $this->hasMany(Club::class); 
} 

// in the Clubs model 
public function user() 
{ 
    return $this->belongsTo(User::class); 
} 

另外,我不熟悉的数据表,但有一点值得注意的是,你实际上并不执行在您的getForDataTable()方法中查询。它缺少->get()或类似的。另外还有一个问题,$this->query()似乎并不是您尝试做的最有效的方式,但很难说清楚。

而在这行:

return Datatables::of($this->clubs->getForDataTable()) 

是俱乐部多家具乐部的集合?因为您无法在对象集合上调用模型方法。

+0

我试过这个,现在它显示所有用户'first_name'作为数组。 –

+0

我已经更新了一些 - 如果它不起作用,您能否更具体地描述'$ this-> clubs'是什么,以及您想要调用什么? –