我使用此hasOneThrough
通过user
获取post
来显示结果file
:
控制器
File::where('agent_id', $user->id)
->with(['user' => function ($q) {
$q->select('name','phone');
}])->get(['post_id', 'status']);
模型
// __________________________ related__|__through_|_1key_|_2key_|_lkey_|_seclkey
return $this->hasOneThrough('App\User', 'App\Post', 'id', 'id', 'post_id', 'user_id');
// ___________________________________________^ > want to get `hash` from `post`
这项工作很好,但是现在我需要从post
中获得一个名为hash
的项目,是否有可能从through
(邮政表格)中获取任何数据。已经能够从file
和user
获取任何数据,但是如何从through
获取数据?(邮政表格)?
我不知道该怎么办,所以我搜索了一下,但没有找到任何东西,所以我什么也不能尝试。
答案 0 :(得分:1)
如果您的File
表具有post_id
,并且在posts
和files
表之间存在一对多关系,只需声明一个新关系:
public function post(){
return $this->belongsTo('App\Post', 'post_id', 'id');
}
请记住,如果您只想在with
内选择特定字段,则只需执行->with('user:phone,name')
答案 1 :(得分:1)
您应该在模型中使用hasOne
:
public function post(){
return $this->hasOne('App\Post', 'id', 'post_id');
}
在您的控制器中,您可以使用eager loading,但我注意到您得到了null
,为了使其正常工作,还必须选择ID:
$files = File::where('agent_id', $user->id)->with('user:phone,name', 'post:id,hash')->get(['post_id', 'status']);