我觉得这个问题非常愚蠢,但我完全感到困惑(可能是因为我很新蛋糕而且有点吓人)..
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未知列 'on clause'中的'BloodGroup.donor_id'
这个ofcours意味着cakePHP正在查找blood_groups表中的fk donor_id。然而,这种关系是另一种方式,fk存储在捐赠者表中。
我不知道数据库设计是否存在缺陷,或者是否需要在蛋糕内重新定义关联。请帮助,因为我对CakePHP很新,我实际上因为它的优点而被迫使用它。 我已经阅读了关于蛋糕文档中模型之间关联的所有部分,但我仍在努力。我怎么能这样做?
答案 0 :(得分:2)
要获得此数据库设置,正确的工作将是:
但你的外键错了:Follow the CakePHP conventions!
模型字段应该是较低的套接字和下划线,PK应该只是id,FK是assoc的模型名称,单数,带有后缀_id的下划线。捐助者表中的PK是正确的。
为什么你甚至改变自己的约定? DonorId vs blood_group_id为PKs?但是,如果你想让它们像你想要的那样混乱,那么你必须在任何地方明确地声明它们。请参阅linking models。
我建议你在弄乱框架之前先做the blog tutorial以完成一个真正的项目。
答案 1 :(得分:1)
更改您的捐赠者模型,如下所示:
我在BloodGroup中添加了foreignKey,在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')
)
);
上述错误的原因:如果未在关联数组中定义foreignKey,则CakePHP假定tablename_id为foreignKey。