阐明如何在Laravel的Eloquent ORM中建立一对多的关系

时间:2013-06-01 04:58:33

标签: php orm laravel laravel-4 eloquent

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

我原以为hasOne将是一对一的关系,而且属于一对多的一方。但是在文档中,在这里插入相关模型:

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使用{{1} }}

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

save()

我将使用的地方:

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

这种或那种方式有优势吗?或者它只是一个在上下文中有意义的问题?

1 个答案:

答案 0 :(得分: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