0

我有一个表“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 对我来说没有意义,所以我认为必须有一个我的设置有问题)。


电子邮件设置.php

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

用户.php

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

2 回答 2

1

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

于 2013-11-04T14:42:18.800 回答
1

虽然var $primaryKey = 'user_id';可以解决问题并解决问题,但按照CakePHP惯例,每个表都应该有一个id字段,我认为它大多是可以接受的。

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

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

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

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

于 2013-11-04T18:42:26.467 回答