2013-07-25 3 views
2

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

Для отношений hasOne, согласно documentation:

"Пользователь 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 
     ) 
) 

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

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

enter image description here

enter image description here

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

бы больше смысла, если "Пользователь hasOne Профиль" является

enter image description here

enter image description here

Итак, то это будет "User hasOne Profile", но "Профиль пользователя" hasMany?

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

+0

Откуда вы получаете эти столовые изображения? – Alvaro

+0

Я сделал это сам, просто чтобы проиллюстрировать мое замешательство. – Timber

+0

Я ответил вам. – Alvaro

ответ

1

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

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

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

+0

Хорошо, поэтому, если я понимаю это правильно, иностранец, который помещен в таблицу 'profile', уникален тогда? – Timber

+0

Да, все. По дизайну. – Alvaro

+0

Ahh okay, теперь я чувствую себя глупо ... Итак, если вы разместили 'public $ hasOne = 'Profile';' на модели User, это сделает внешний ключ уникальным? иначе, если вы поместите '$ hasMany', то это позволит дублировать записи. Это верно? – Timber

 Смежные вопросы

  • Нет связанных вопросов^_^