2014-02-22 46 views
0

我有3个表Laravel 4锋选择

---帖子(所有的职位) 行= ID,标题,内容

---板(所有的板) 行= ID,标题

--- board_post(板材和柱之间的链接:许多< - >许多) 行= board_id,POST_ID

2命名板锋类和张贴

现在我会愿意选择从船上所有的帖子,根据board_post

我想在路上: Posts::whereIn('id', $board->post_ids())

我怎么能做到这一点,首先关闭 如果我做Board :: find(1) - > post_ids,我得到该板的所有帖子ID

然后我将如何获得所有后期的对象?

问候格伦

回答

1

你为什么使用多对多关系? p为邮政和董事会?这很可能是一对多的关系:董事会可能有多个职位,但职位应该只属于一个董事会(这将简化您的数据库结构,以删除board_post表)。

然后,您会怎么做:

内板类:

public function posts() { 
    return $this->hasMany('Post', 'board_id'); 
} 

然后,董事会::发现(1) - >职位将让你所有的职位该板(用木桩,而不是帖子())。


要与当前数据库的设置做到这一点,使用belongsToMany代替:

public function posts() { 
    return $this->belongsToMany('Post', 'board_post'); 
} 

如果要加载董事会这一切帖子(热切加载)使用此:

Board::with('posts')->find(1) 

否则,只是为了获得职位特定板用途:

Board::find(1)->posts 
+0

不,一个职位可以在多个董事会感到:) – Kiwi

+0

@Kiwi有趣的是,在这种情况下,第二个功能应该可以工作,而且您仍然可以通过类似于Board :: find(1) - > posts – TonyArra

+0

的方式获得帖子是的,固定它thx! – Kiwi

1

在主板型号请确保您定义belongsToMany关系

public function posts() 
{ 
    return $this->belongsToMany('Post', 'board_post'); 
} 

现在,你应该能够做到这一点:

Board::find({id})->posts 

Forther阅读材料:http://laravel.com/docs/eloquent#relationships

+0

它是'Board :: find({id}) - > posts'但是够好:) 谢谢! – Kiwi

+1

我已更新答案。 – phoops