Laravel - hasManyThrough 和预先加载,从相关的获取列
Laravel - hasManyThrough and eager loading, get column from related
我在尝试使用 hasManyThrough 急切加载相关模型时遇到了一些奇怪的事情。
我有一个社区模型,它有一个名为 'roommates' 的函数,用于获取在名为 'community' 的列中具有社区 ID 的所有用户,请参见下面的代码。
public function roommates()
{
return $this->hasManyThrough('App\User', 'App\Community', 'id', 'community');
}
然后在登录后从Auth中抓取User模型并急切加载相关模型,并且只显示我想要的列。身份证、姓名、电子邮件
$user = User::where('id', Auth::id())->with(['community.roommates' => function ($query)
{
$query->select('users.id', 'name', 'email');
}])->first();
但是我的 JSON 响应不是我所期望的,返回的 ID 似乎是社区的 ID,即使我指定了 'users.id'
{
"status": true,
"data": {
"id": 3,
"name": "Foo Bar",
"email": "test@test.com",
"community": {
"id": 1,
"owner": 3,
"title": "Home",
"created_at": "2015-10-09 08:04:05",
"updated_at": "2015-10-09 08:04:05",
"roommates": [
{
"id": 1,
"name": "Foo Bar 2",
"email": "test@test.com"
},
{
"id": 1,
"name": "Foo Bar",
"email": "test@test.com"
}
]
},
"remember_token": "tprkiNOYbBiViwQkVcJMcwU8poZ1/00Uktmy7AQ+",
"created_at": "2015-10-09 08:03:42",
"updated_at": "2015-10-10 04:56:14"
}
}
正如您所见,室友数组中两个用户的 id 均为 1,但这些用户的 id 分别为 2 和 3。
有什么想法吗?
我仍然对 Laravel 有感觉,所以我不确定从这里到哪里去?
终于解决了,
我改为使用 hasMany 而不是 hasManyThrough
public function roommates()
{
return $this->hasMany('App\User', 'community_id', 'id')->select(['community_id', 'id', 'name', 'email']);
}
而且我还需要 select 外键 community_id,否则我会得到一个空白结果。
帮助我解决这个问题的致谢
Laravel Eager Loading - Load only specific columns
我在尝试使用 hasManyThrough 急切加载相关模型时遇到了一些奇怪的事情。
我有一个社区模型,它有一个名为 'roommates' 的函数,用于获取在名为 'community' 的列中具有社区 ID 的所有用户,请参见下面的代码。
public function roommates()
{
return $this->hasManyThrough('App\User', 'App\Community', 'id', 'community');
}
然后在登录后从Auth中抓取User模型并急切加载相关模型,并且只显示我想要的列。身份证、姓名、电子邮件
$user = User::where('id', Auth::id())->with(['community.roommates' => function ($query)
{
$query->select('users.id', 'name', 'email');
}])->first();
但是我的 JSON 响应不是我所期望的,返回的 ID 似乎是社区的 ID,即使我指定了 'users.id'
{
"status": true,
"data": {
"id": 3,
"name": "Foo Bar",
"email": "test@test.com",
"community": {
"id": 1,
"owner": 3,
"title": "Home",
"created_at": "2015-10-09 08:04:05",
"updated_at": "2015-10-09 08:04:05",
"roommates": [
{
"id": 1,
"name": "Foo Bar 2",
"email": "test@test.com"
},
{
"id": 1,
"name": "Foo Bar",
"email": "test@test.com"
}
]
},
"remember_token": "tprkiNOYbBiViwQkVcJMcwU8poZ1/00Uktmy7AQ+",
"created_at": "2015-10-09 08:03:42",
"updated_at": "2015-10-10 04:56:14"
}
}
正如您所见,室友数组中两个用户的 id 均为 1,但这些用户的 id 分别为 2 和 3。
有什么想法吗?
我仍然对 Laravel 有感觉,所以我不确定从这里到哪里去?
终于解决了,
我改为使用 hasMany 而不是 hasManyThrough
public function roommates()
{
return $this->hasMany('App\User', 'community_id', 'id')->select(['community_id', 'id', 'name', 'email']);
}
而且我还需要 select 外键 community_id,否则我会得到一个空白结果。
帮助我解决这个问题的致谢
Laravel Eager Loading - Load only specific columns