1

问候所有工匠。

我正在寻找解决关系的最佳实践,如下表所示:

表“公司”

id     name

1      Apple
2      Google
3      Facebook
...

表“员工”

id     name   company_id

1      Alex   1
2      Benny  1
3      Tony   2
...

表“帖子”

id     content           staff_id

1      Lorem ipsum A     1
2      Lorem ipsum B     1
3      Lorem ipsum C     5
...

如何定义与 eloquent 的关系,以便我可以从特定“公司”中选择所有“帖子”。我可以在 'posts' 表中声明额外的 'company_id' 列作为解决方法。

但是我们可以使用 eloquent 来选择,例如:

$posts = Post::where('staff_id', IN, COMPANY_ID)->get();

提前致谢

4

2 回答 2

6

最后 Laravel 4.1 提供了这个特性,叫做hasManyThrough! 万岁!

http://laravel.com/docs/eloquent#has-many-through

于 2013-12-18T01:44:34.997 回答
3

编辑:我似乎误解了这个问题,你可以像这样急切地加载嵌套关系:

$company = Company::find(COMPANY_ID)->with('staff.posts')->get();

然后你可以遍历它们:

foreach($company->staff() as $staff)
{
     foreach($staff->posts() as $post)
     {
         echo $post->content;
     }
}

但这两种关系都需要定义。

// models/company.php
public function staff()
{
   return $this->hasMany('Staff');
}

// models/staff.php
public function posts()
{
   return $this->hasMany('Post');
}
于 2013-06-12T10:43:59.190 回答