好的,我正在通过Laravel 4文档来设置两个模型之间的一对多关系。显然,一方应该使用hasMany()。但是对于另一边,我应该使用hasOne还是belongsTo呢?这有关系吗?的区别是什么?为什么两者都存在?
我原以为hasOne是一对一的关系,belongsTo是一对多的一方。但是在文档中,在这里插入相关模型:
http://laravel.com/docs/eloquent inserting-related-models
他们使用的save()
似乎只存在于hasOne
和hasMany
关系中,而不存在于belongsTo
中。看起来belongsTo
使用associate()
来达到同样的目的:
https://github.com/laravel/framework/blob/master/src/Illuminate/Database/Eloquent/Relations/BelongsTo.php L188
也许我只是需要一些关于何时使用belongsTo
与hasOne
的一般背景,以及为什么belongsTo
使用associate()
而hasOne
使用save()
。
编辑:我想我的困惑点是在文档(http://laravel.com/docs/eloquent#inserting-related-models)中,他们使用:
$post->comments()->save($comment);
我应该用:
$comment->post()->associate($post);
这一种方式有优势吗?或者这只是一个在上下文中什么是有意义的问题?
请参考laravel文档关于帖子和评论之间的一对多关系http://laravel.com/docs/eloquent#relationships。(一个帖子有很多评论,一个评论属于一个帖子)。
帖子和评论的表格如下
Posts表Id | title |正文
<<p> 评论表/strong>Id | comment | post_id包含外键的数据库表属于另一个表中的记录,因此,在comments模型中必须指定comments属于posts。
你是正确的,hasOne关系只适用于一对一的关系。
这是一篇带有laravel 3代码的博客文章,它解释了雄辩关系方法是如何工作的。
http://laravel.io/topic/14/how-eloquent-relationship-methods-work