CakePHP 2 - 关联表是否需要“id”primaryKey?

时间:2013-11-04 14:21:56

标签: cakephp save sql-update

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

电子邮件设置包含以下列:

  • 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');
}

2 个答案:

答案 0 :(得分:1)

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

答案 1 :(得分:1)

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

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

您的方法是正确的,如果使用表格,可以让您更改它们。

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

所以,最后我建议你使用id字段。 Becasuse,CakePHP 约定优于配置的忠实粉丝。