php - 阐明如何在 Laravel 的 Eloquent ORM 中设置一对多关系

标签 php orm laravel laravel-4 eloquent

好的,我正在研究 Laravel 4 文档以在两个模型之间建立一对多关系。显然,一侧应该使用 hasMany()。但是对于另一边,我应该使用 hasOne 还是 belongsTo?有关系吗?有什么区别?为什么两者都存在?

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

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 使用 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/

相关文章:

php - 循环分配

php - MYSQL 获取行到不同的表

Django,在 self 类内的多对多关系中,我如何在ORM方面相互引用?

javascript - Laravel 5.6 通过 ajax 调用将 Blade 注入(inject) View

php - Laravel 在函数构造上检查用户角色

php - 自定义 WP 主题时,我应该将导航栏放在 `<body>` 标签之前还是之后?

php - 序列化数据未正确进入 php 数组

database - 规范化的类设计是否会导致规范化的数据库设计

sql-server - Node.js 上 SQL Server 的 ORM

laravel - 邮件动态创建的 .ics 文件附件无法打开文件进行阅读