2013-06-01 87 views
10

好的,我正在通过Laravel 4文档设置两个模型之间的一对多关系。显然,一方应该使用hasMany()。但对于另一方面,我应该使用hasOne还是belongsTo?有关系吗?有什么区别?为什么两者都存在?澄清如何在Laravel的雄辩ORM中设置一对多关系

我曾以为hasOne会用于一对一的关系,belongsTo会用于one-to-many的一边。但是,在该文档中,这里插入相关模型:

http://laravel.com/docs/eloquent#inserting-related-models

他们使用save()这似乎只存在于hasOnehasMany关系,而不是在belongsTo。它看起来像belongsTo使用associate()为了同样的目的:

https://github.com/laravel/framework/blob/master/src/Illuminate/Database/Eloquent/Relations/BelongsTo.php#L188

也许我只是需要时使用belongsTohasOne一些一般性的背景,为什么belongsTo使用associate()hasOne使用save()

编辑:我想我的困惑的一点是,在文档(http://laravel.com/docs/eloquent#inserting-related-models),他们使用:

$post->comments()->save($comment); 

,我会用:

$comment->post()->associate($post); 

是否有优势,一个方式或其他?或者这只是一个在上下文中有意义的问题?

回答

10

请参阅关于帖子和评论之间的一对多关系的laravel文档http://laravel.com/docs/eloquent#relationships。 (其中一个帖子有很多评论,而评论属于某个帖子)。

的文章和评论的表如下所示

帖子表 ID |标题|身体

评论表 ID |评论| post_id

包含外键的数据库表属于另一个表中的记录,因此,在评论模型中,您必须指定注释属于帖子。

你是正确的,hasOne关系只适用于一对一的关系。

这是一篇博文,介绍laravel 3代码,它解释了雄辩的关系方法是如何工作的。

http://laravel.io/topic/14/how-eloquent-relationship-methods-work

+0

这种帮助,因为我有我的关系倒退定义。我把这个表的外键作为'hasMany'。 –