Laravel通过关系获取数据

时间:2019-11-30 11:14:06

标签: php laravel

我使用此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(邮政表格)中获取任何数据。已经能够从fileuser获取任何数据,但是如何从through获取数据?(邮政表格)

我不知道该怎么办,所以我搜索了一下,但没有找到任何东西,所以我什么也不能尝试。

2 个答案:

答案 0 :(得分:1)

如果您的File表具有post_id,并且在postsfiles表之间存在一对多关系,只需声明一个新关系:

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']);