【问题标题】:CakePHP 2 - does associated table need an "id" primaryKey?CakePHP 2 - 关联表是否需要“id”primaryKey?
【发布时间】:2013-11-04 14:21:55
【问题描述】:

我有一个表“emailsettings”,它与表“users”有“belongsTo”关系。

emailsettings 包含以下列:

  • user_id (INT)
  • 已订阅(NULL,0 或 1)
  • 时事通讯(NULL,0 或 1)
  • 通知(NULL,0 或 1)

我的问题是,我无法更新条目,CakePHP 总是尝试插入新行,即使我这样做 $this->Emailsetting->user_id = 1

关联表是否可能需要“id”primaryKey,或者如果我有“user_id”,我可以强制 CakePHP 更新条目(添加 id primaryKey 对我来说没有意义,所以我认为有是我的设置的问题)。


Emailsetting.php

<?php
class Emailsetting extends AppModel {
    public $name = 'Emailsetting';
    public $belongsTo = array('User' => array('className' => 'User', 'foreignKey' => 'user_id'));
    public $useTable = 'email_settings';
} 

User.php

<?php
class User extends AppModel {
    public $name = 'User';
    public $hasOne = array('Profile', 'Emailsetting');
}

【问题讨论】:

    标签: cakephp save sql-update


    【解决方案1】:

    虽然var $primaryKey = 'user_id'; 解决了问题,但是根据CakePHP 的约定,每个表都应该有一个id 字段,我认为它大部分是可以接受的。

    因为,如果您需要使用emailsettings 表与一个/多个表建立关系,那么在这种情况下,id 将在关系和查询操作中发挥关键作用。否则,您需要手动将所有这些关系和查询映射到主键 user_id

    您的方法是正确的,如果使用表格,您NO有权更改它们。

    此外,一个独特的id 字段,通常可用于不同的操作,如deleteedit 等。有时可能还需要不同的 JS/AJAX 操作等。强>

    所以,最后我建议你使用id 字段。因为,CakePHP约定优于配置的忠实拥护者。

    【讨论】:

    • 好点,我会添加 ID,即使现在它什么也没做,但将来可能会改变:)
    【解决方案2】:

    在我的“Emailsetting.php”模型中设置var $primaryKey = 'user_id'; 似乎可以解决问题,但这是正确的方法吗?

    【讨论】:

    • 我个人在我的连接表中包含了一个primary key,但我也知道很多其他人没有。如果您不想专门为连接表记录包含单独的primary key,那么您可以使用var $primaryKey = 'user_id';。只要这仍然是hasOne 关系,那么您就不应该遇到问题。
    猜你喜欢
    • 2012-02-05
    • 1970-01-01
    • 2016-03-03
    • 2021-10-20
    • 2012-02-08
    • 1970-01-01
    • 1970-01-01
    • 2011-03-04
    • 2013-12-23
    相关资源
    最近更新 更多