CakePHP: отношения один на один

Я немного запутался в том, как CakePHP устанавливает отношения с базой данных.

Для отношения hasOne, согласно документации < / а>:

«У пользователя один профиль»

User hasOne Profile -> profiles.user_id

Array
(
    [User] => Array
        (
            [id] => 121
            [name] => Gwoo the Kungwoo
            [created] => 2007-05-01 10:31:01
        )
    [Profile] => Array
        (
            [id] => 12
            [user_id] => 121
            [skill] => Baking Cakes
            [created] => 2007-05-01 10:31:01
        )
)

Но разве это не отношение "один ко многим"?

Например (я сделал эту таблицу, чтобы проиллюстрировать свое замешательство):

введите описание изображения здесь

введите описание изображения здесь

В этом случае существует 2 профиля, принадлежащих одному пользователю. Разве это не значит, что у пользователя много профилей?

Было бы больше смысла, если бы "Пользователь имеет один профиль"

введите описание изображения здесь

введите описание изображения здесь

Значит, это будет «У пользователя один профиль», но «У профиля есть много пользователей»?

Я не уверен, правильно ли я это понимаю.


person Timber    schedule 25.07.2013    source источник
comment
Откуда вы берете эти изображения стола?   -  person Alvaro    schedule 25.07.2013
comment
Я сделал это сам, просто чтобы проиллюстрировать свое замешательство.   -  person Timber    schedule 25.07.2013


Ответы (1)


В примере в документации, когда сказано, что у пользователя есть один профиль, это означает, что у пользователя может быть только один профиль.

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

Ваши изображения неправильные. В вашем случае это будет один ко многим. Это hasMany + belongsTo. Они просто решили, что будет только один профиль на пользователя, если вы хотите иметь много профилей на пользователя, то это не будет hasOne. Это твое решение.

person Alvaro    schedule 25.07.2013
comment
Итак, если я правильно понимаю, тогда чужой объект, помещенный в таблицу profile, уникален? - person Timber; 25.07.2013
comment
Ага, вот и все. По дизайну. - person Alvaro; 25.07.2013
comment
Ах, ладно, теперь я чувствую себя глупо ... Значит, если вы поместите public $hasOne = 'Profile'; в модель User, это сделает внешний ключ уникальным? иначе, если вы поместите $hasMany, это позволит дублировать записи. Это правильно? - person Timber; 25.07.2013
comment
Я не уверен в этом. Вы можете попробовать сами. В противном случае вы можете добавить ограничение в таблицу, и это приведет к ошибке. - person Alvaro; 25.07.2013
comment
Извините, что пометили это как ответ так долго. Я провожу свои собственные тесты. Я долго думал об этом. Ваш ответ и комментарии очень помогли, так что спасибо :). - person Timber; 26.07.2013