10

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

我原以为 hasOne 将用于一对一关系,belongsTo 将用于一对多的一方。但在文档中,用于在此处插入相关模型:

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

他们使用save()的似乎只存在于hasOneandhasMany关系中,而不存在于belongsTo. 看起来belongsTo用途associate()相同:

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

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

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

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

我会在哪里使用:

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

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

4

1 回答 1

11

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

帖子和评论的表格如下

帖子表 ID | 标题 | 身体

评论表 id | 评论 | post_id

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

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

这是一篇带有 laravel 3 代码的博客文章,它解释了 eloquent 关系方法的工作原理。

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

于 2013-06-01T08:09:20.047 回答