Laravel 4 Eloquent ORM推进关系

时间:2013-06-12 10:31:11

标签: php laravel laravel-4 eloquent

向所有工匠致意。

我找到了解决关系的最佳做法,如下表所示:

表“公司”

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
...

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

但我们可以使用eloquent选择如下例子:

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

提前致谢

2 个答案:

答案 0 :(得分:6)

最后,Laravel 4.1提供了这个名为hasManyThrough的功能! Horray!

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

答案 1 :(得分: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');
}