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

eim*_*hat 10 php orm laravel eloquent laravel-4

好的,我正在通过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

也许我只需要一些关于何时使用belongsTovs.的一般背景hasOne,以及为什么在belongsTo使用associate()hasOne使用save().

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

$post->comments()->save($comment);
Run Code Online (Sandbox Code Playgroud)

我会用到的地方:

$comment->post()->associate($post);
Run Code Online (Sandbox Code Playgroud)

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

Tho*_*son 10

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

帖子和评论的表格如下

帖子表 ID | 标题| 身体

注释表 ID | 评论| POST_ID

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

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

这是一篇带有laravel 3代码的博客文章,它解释了雄辩的关系方法是如何工作的.

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