好的,我正在研究 Laravel 4 文档以在两个模型之间建立一对多关系。显然,一侧应该使用 hasMany()。但是对于另一边,我应该使用 hasOne 还是 belongsTo?有关系吗?有什么区别?为什么两者都存在?
我原以为 hasOne 将用于一对一关系,而 belongsTo 将用于一对多的一侧。但是在文档中,为了在此处插入相关模型:
http://laravel.com/docs/eloquent#inserting-related-models
他们正在使用 save()
,它似乎只存在于 hasOne
和 hasMany
关系中,而不存在于 belongsTo
。看起来 belongsTo
使用 associate()
来达到同样的目的:
也许我只需要一些关于何时使用 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 . (一个帖子有很多评论,一个评论属于一个帖子)。
帖子和评论的表格如下
帖子表 编号 |标题 |正文
评论表 编号 |评论 | post_id
包含外键的数据库表属于其他表中的记录,因此,在评论模型中,您必须指定评论属于帖子。
你是正确的,hasOne 关系只适用于一对一关系。
这是一篇包含 laravel 3 代码的博客文章,它解释了 Eloquent 关系方法是如何工作的。
http://laravel.io/topic/14/how-eloquent-relationship-methods-work
关于php - 阐明如何在 Laravel 的 Eloquent ORM 中设置一对多关系,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16869249/