Подтвердить что ты не робот

Уточните, как настроить отношения "один ко многим" в Laravel Rloquent ORM

Хорошо, я работаю над документами Laravel 4, чтобы настроить отношения "один ко многим" между двумя моделями. Очевидно, что одна сторона должна использовать hasMany(). Но для другой стороны, следует ли использовать hasOne или принадлежать? Это имеет значение? Какая разница? Почему обе существуют?

Я думал, что hasOne будет для взаимно-однозначных отношений, и принадлежит для одной стороны одного-ко-многим. Но в документах для вставки связанной модели здесь:

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

они используют save(), который, кажется, присутствует только в отношениях hasOne и hasMany, а не в belongsTo. Похоже, что belongsTo использует associate() для этой же цели:

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

Возможно, мне просто нужен общий фон, когда следует использовать belongsTo vs. hasOne, и почему belongsTo использует associate(), а hasOne использует save().

EDIT: Я предполагаю, что моя точка зрения заключалась в том, что в документах (http://laravel.com/docs/eloquent#inserting-related-models) они использовали:

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

где я бы использовал:

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

Есть ли преимущество для одного или другого? Или это просто вопрос о том, что имеет смысл в контексте?

4b9b3361

Ответ 1

Пожалуйста, обратитесь к документам laravel по одному для многих отношений между сообщениями и комментариями http://laravel.com/docs/eloquent#relationships. (Там, где у одного сообщения много комментариев, а комментарий принадлежит сообщению).

Таблицы для сообщений и комментариев выглядят следующим образом

Таблица сообщений id | название | Тело

Таблица комментариев id | Комментарий | post_id

Таблица базы данных, содержащая внешний ключ, принадлежит к записи в другой таблице, поэтому в модели комментариев вы должны указать, что комментарии принадлежат сообщениям.

Вы правы, что отношение hasOne применимо только к отношениям один к одному.

Вот сообщение в блоге с кодом laravel 3, в котором объясняется, как работают красноречие методы отношений.

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