Php Laravel 5.4获取相关数据并显示
我用它作为我项目的起点 我有一个Php Laravel 5.4获取相关数据并显示,php,laravel,laravel-5,Php,Laravel,Laravel 5,我用它作为我项目的起点 我有一个用户表和俱乐部表用户可以有一个俱乐部,俱乐部附加到一个用户 所以我在clubs表中定义了hasOne关系,如下所示 public function user() { return $this->hasOne(User::class, 'id', 'user_id'); } 俱乐部表中有用户id列 我无法在我的索引页面上获得正确的数据来显示用户的用户名 我正在使用ClubsRepository显示数据 下面是它的代码 public function
用户
表和俱乐部
表<代码>用户可以有一个俱乐部,俱乐部
附加到一个用户
所以我在clubs
表中定义了hasOne
关系,如下所示
public function user()
{
return $this->hasOne(User::class, 'id', 'user_id');
}
俱乐部
表中有用户id
列
我无法在我的索引
页面上获得正确的数据来显示用户的用户名
我正在使用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()”方法
我的索引。刀片代码如下
<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>
俱乐部名称
描述
用户名
创建
上次更新
$(函数(){
$(“#俱乐部表”)。数据表({
dom:'lfrtip',
处理:假,
服务器端:是的,
自动宽度:false,
阿贾克斯:{
url:“{route(“admin.access.clubs.get”)}”,
键入:“post”,
数据:{状态:1,垃圾:false},
错误:函数(xhr,err){
如果(错误=='parsererror')
控制台日志(err);
}
},
栏目:[
{数据:'clubName',名称:'clubs.clubName'},
{数据:'description',名称:'clubs.description'},
{data:'user',name:'user.first_name',sortable:false},
{data:'created_at',name:'clubs.created_at'},
{数据:'updated_at',name:'clubs.updated_at'}
],
});
});
我做错了什么?尝试此查询以获取用户的俱乐部数据
User::with(array('clubs' => function($q) {
}))->get();
看起来您使用了错误的关系类型-如果clubs表有一个user\u id列,这意味着它属于用户,而不是它有一个用户
假设每个用户可以有多个俱乐部,那么您需要的是
// in the User model
public function clubs()
{
return $this->hasMany(Club::class);
}
// in the Clubs model
public function user()
{
return $this->belongsTo(User::class);
}
此外,我不熟悉datatables,但值得注意的是,您实际上并没有在getForDataTable()
方法中执行查询。它缺少->get()
或类似代码。还有一个问题是,$this->query()
似乎不是最有效的方法,但很难确定
在这方面:
return Datatables::of($this->clubs->getForDataTable())
这些俱乐部是多个俱乐部的集合吗?因为你不能对一组对象调用模型方法。@AaronFahey试过了,但不起作用。我试过了,现在它将所有用户的名字显示为数组。我更新了一些-如果不起作用,你能更具体地描述一下$this->clubs
是什么吗,你想叫什么?
return Datatables::of($this->clubs->getForDataTable())