我有一个表“emailsettings”,它与表“users”有“belongsTo”关系。
电子邮件设置包含以下列:
我的问题是,我无法更新条目,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');
}
答案 0 :(得分:1)
在我的“Emailsetting.php”-Model中设置var $primaryKey = 'user_id';
似乎可以解决问题,但这是正确的做法吗?
答案 1 :(得分:1)
虽然var $primaryKey = 'user_id';
可以解决问题,但根据CakePHP
约定,每个表都应该有一个id
字段,我认为它几乎可以接受。
因为,如果您需要与一个或多个表与emailsettings
表建立关系,那么在这种情况下,id
将在关系和查询操作中发挥关键作用。否则,您需要手动将所有这些关系和查询映射到主键user_id
。
您的方法是正确的,如果使用表格,否可以让您更改它们。
此外,还有一个唯一的id
字段,通常可用于delete
,edit
等不同的操作。有时可能还需要不同的JS / AJAX操作等等。
所以,最后我建议你使用id
字段。 Becasuse,CakePHP
是 约定优于配置的忠实粉丝。