2013-07-25 54 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 
     ) 
) 

但不是这一个一对多的关系?

例如(I由这些表,说明我的混乱):

enter image description here

enter image description here

在这种情况下,然后存在属于相同的用户简档2。这是不是意味着用户拥有许多配置文件?

会更有意义,如果 “用户hasOne档案” 是

enter image description here

enter image description here

所以那么这将是 “用户hasOne档案”,而是 “个人资料的hasMany用户”?

我不知道我是否正确理解这一点。

+0

从哪里得到这些表格图像? – Alvaro

+0

我自己做的,只是为了说明我的困惑。 – Timber

+0

我回答了你。 – Alvaro

回答

1

在文档中的示例中,当其说用户具有一个配置文件时,这意味着用户只能拥有一个配置文件。

因此是一对一的关系。您可以选择您希望拥有外键的位置,并且他们倾向于在profile表中使用它。

您的图片是错误的。在你的情况下,这将是一对多。这是一个hasMany + belongsTo。 他们只是决定每个用户只有一个配置文件,如果你想为每个用户配置多个配置文件,那么它不会是hasOne。这是你的决定。

+0

好吧,如果我正确地理解了这个,那么放在'profile'表上的外部是唯一的呢? – Timber

+0

是的,就是这样。按设计。 – Alvaro

+0

啊好吧,我现在觉得很蠢......所以,如果你在用户模型中放置'public $ hasOne ='Profile';'这将使外键独一无二?否则,如果你把'$ hasMany'那么它会允许重复的条目。它是否正确? – Timber