Clarify how to setup a one-to-many relationship in Laravel's Eloquent ORM

你说的曾经没有我的故事 提交于 2019-12-05 17:45:27

问题


Okay, I'm working through the Laravel 4 docs to setup a one-to-many relationship between two models. Obviously, one side should use hasMany(). But for the other side, should I use hasOne or belongsTo? Does it matter? What's difference? Why do both exist?

I had thought hasOne would be for one-to-one relationships, and belongsTo would be for the one side of one-to-many. But in the docs, for inserting a related model here:

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

they are using save() which seems to only be present in hasOne and hasMany relationships, not in belongsTo. It looks like belongsTo uses associate() for the same purpose:

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

Maybe I just need some general background on when to use belongsTo vs. hasOne, and why belongsTo uses associate() while hasOne uses save().

EDIT: I guess my point of confusion was that in the docs (http://laravel.com/docs/eloquent#inserting-related-models), they used:

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

where I would have used:

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

Is there an advantage to one way or the other? Or is it just a question of what makes sense in the context?


回答1:


Please refer to the laravel docs on the one to many relationship between posts and comments http://laravel.com/docs/eloquent#relationships. (Where one post has many comments and a comment belongs to a post).

The tables for posts and comments be as follows

Posts Table id | title | body

Comments Table id | comment | post_id

The database table that contains a foreign key belongs to a record in the other table, therefore, in the comments model you must specify that comments belongs to posts.

You are correct that the hasOne relationship only applies to one to one relationships.

Here is a blog post with laravel 3 code which gives an explanation into how eloquent relationship methods work.

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



来源:https://stackoverflow.com/questions/16869249/clarify-how-to-setup-a-one-to-many-relationship-in-laravels-eloquent-orm

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!