我觉得发这个问题很傻,但我完全困惑(可能是因为我对蛋糕很陌生,有点害怕)。。
hasOne hasOne
donors | blood_groups | donor_types
Att ------------------+-----------------------+---------------------+
DonorID (pk) | blood_group_id (pk) | type_id (pk) |
Name | group | type |
Surname | | |
type_id(fk) | | |
blood_group_id(fk)| | |
供体模型
class Donor extends AppModel{
public $hasOne = array(
'BloodGroup'=> array(
'className' => 'BloodGroup'
),
'DonorType' => array(
'className' => 'DonorType'
)
);
我已经在使用相关模型来填充捐赠者注册视图中的FormHelper输入,一切都很好。
但是当我试图检索捐赠者记录时,会出现这个错误
错误:SQLSTATE[42S22]:未找到列:1054未知列“BloodGroup”。捐赠者id“在”on子句中”
这意味着cakePHP正在血型表中查找fk捐赠者id。然而,关系是相反的,fk存储在表中。
我不知道db设计是否有缺陷,或者是否需要在蛋糕中重新定义关联。请帮助,因为我是cakePHP的新手,我实际上被迫使用它,因为它的优点。我已经阅读了蛋糕文档中所有关于模型之间关联的部分,但我仍然在挣扎。我该怎么做呢?
要获得正确的数据库设置,ASSOC将:
但是您的外键是错误的:遵循CakePHP约定!
模型字段应小写并加下划线,PKs应仅为id,FKs是assoc的模型名称,单数,带后缀_id下划线。捐赠者表中的PKs是正确的。
你为什么要改变自己的惯例?DonorId vsblood_group_idPKs?然而,如果你想引起混乱,就像你想的那样命名它们,但是你必须在任何地方明确声明它们。请参见链接模型。
我建议你在弄乱框架之前先做博客教程,以完成一个真正的项目。
更改您的捐赠者型号,如下所示:
我在血型中添加了外键,在DonorType中添加了条件:
class Donor extends AppModel{
public $hasOne = array(
'BloodGroup'=> array(
'className' => 'BloodGroup',
'foreignKey' => 'blood_group_id'
),
'DonorType' => array(
'className' => 'DonorType',
'conditions' => array('Donor.type_id' => 'DonorType.type_id')
)
);
以上错误的原因:如果在关联数组中没有定义外键,那么CakePHP假设tablename_id是外键。