【问题标题】:CakePHP: One to One relationshipCakePHP:一对一的关系
【发布时间】:2023-03-29 15:37:02
【问题描述】:

我对 CakePHP 如何处理它的数据库关系有点困惑。

对于一个hasOne关系,根据documentation

“用户拥有一个个人资料”

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 个配置文件属于同一用户。这不是意味着用户拥有许多个人资料吗?

如果“User hasOne Profile”是更有意义的

那么这将是“User hasOne Profile”但“Profile hasMany User”?

我不确定我是否理解正确。

【问题讨论】:

  • 你从哪里得到这些表格图像?
  • 我自己做的,只是为了说明我的困惑。

标签: php cakephp database-relations


【解决方案1】:

在文档中的示例中,当它说用户拥有一份个人资料时,这意味着用户只能拥有一份个人资料。

因此是一对一的关系。您可以选择在哪里使用外键,他们更喜欢在 profile 表上使用它。

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

【讨论】:

  • 好的,如果我理解正确的话,那么放在profile 表上的外来词是唯一的吗?
  • 是的,就是这样。按设计。
  • 啊,好吧,我现在觉得很愚蠢......所以如果你把 public $hasOne = 'Profile'; 放在 User 模型上,这会使外键唯一吗?否则,如果您输入$hasMany,那么它将允许重复条目。这是正确的吗?
  • 我不确定。你可以自己试试。否则,您可以在表中添加限制,这将产生错误。
  • 抱歉,我们花了这么长时间才将其标记为答案。我自己做测试。我想多了。你的回答和 cmets 帮助很大,所以谢谢你:)。
猜你喜欢
  • 2023-03-31
  • 1970-01-01
  • 1970-01-01
  • 2010-12-04
  • 1970-01-01
  • 2018-09-27
  • 2011-03-30
  • 2018-10-03
  • 2018-11-19
相关资源
最近更新 更多