对于我的具体案例,我可以使用Laravel雄辩的hasManyThrough关系吗?

时间:2017-06-06 22:44:06

标签: php mysql laravel-5 laravel-5.4 laravel-eloquent

我正在尝试从与我目前使用的模型没有直接关系的表中检索数据。

我的数据结构:

表:帖子

  • id - 整数
  • title - string

表: post_stacks

  • id - 整数
  • post_id - 整数
  • stack_id - 整数

表:堆叠

  • id - 整数
  • body - string
  • url - string

我雄辩的模型来自Post.php(posts表),我正在尝试获取与我的帖子相关的所有堆栈(来自堆栈表)。我想仅在Post.php而不是我的数据透视表(post_stacks)上声明我的关系。我尝试使用hasManyThrough,但我无法让它工作?

public function img()
    {
        return $this->hasManyThrough(\App\Stack::class, \App\PostStack::class, 'post_id', 'stack_id', 'id');
    }

有人知道如何检索我想要的数据吗?谢谢!

1 个答案:

答案 0 :(得分:2)

您是否可以尝试在帖子模型上添加以下关系。

public function stacks()
{
    return $this->hasManyThrough(
        'App\Stacks', 'App\PostStacks',
        'post_id', 'id', 'id'
    );
}

另请看一下https://laravel.com/docs/5.4/eloquent-relationships#has-many-through

根据此文档,hasManyThrough中的第三个参数是中间模型上的外键名称。在我们的案例中,'post_id'post_stack上与posts有直接关系的外键。

第四个参数是最终模型上的外键名称。即'id'上的stacks。与post_stacks ( 'post_id' )有关系。第五个参数是本地密钥。即id个帖子