CakePHP使用具有不同名称的外键作为关联的主键

时间:2014-07-04 04:51:25

标签: cakephp naming convention

我设置了多个模型,我想与这样的主模型相关联:

class CommonType extends AppModel {
    public $useDbConfig = 'common';

    public $hasOne = array(
        'CommonTypeDescription' => array(
            'className' => 'CommonTypeDescription',
            'foreignKey' => 'type_description_id',
            'dependent' => true
        ),
        'CommonTypeExperience' => array(
            'className' => 'CommonTypeExperience',
            'foreignKey' => 'type_expirience_id',
            'dependent' => true             
        ),
        'CommonTypeProperty' => array(
            'className' => 'CommonTypeProperty',
            'foreignKey' => 'type_property_id',
            'dependent' => true         
        ),
    );

    public $belongsTo = array(
        'CommonTypeCategory' => array(
            'className' => 'CommonTypeCategory',
            'foreignKey' => 'common_type_id',
    ));

}

在Heidi SQL中(例如)我为上面的表type_experiences,type_properties和type_descriptions设置了外键,以便我的代码和表中的外键具有相同的名称。

但是现在,我不想将主键命名为外键,(例如)type_descriptions表的主键应命名为“id”。这是type_description的模型:

class CommonTypeDescription extends AppModel {
   public $name = 'CommonTypeDescription';
   public $useDbConfig = 'common';
   public $useTable = 'type_descriptions';
   public $primaryKey = 'id';

}

这是数据库创建代码:

CREATE TABLE `type_descriptions` (
`id` INT(11) NOT NULL AUTO_INCREMENT,
`common_type_id` INT(11) NULL DEFAULT NULL,
`short_description` VARCHAR(50) NULL DEFAULT NULL,
`long_description` VARCHAR(50) NULL DEFAULT NULL,
`notes` VARCHAR(50) NULL DEFAULT NULL,
`modified` DATETIME NULL DEFAULT NULL,
`created` DATETIME NULL DEFAULT NULL,
PRIMARY KEY (`id`),
CONSTRAINT `type_description_id` FOREIGN KEY (`common_type_id`) REFERENCES `common_types` (`id`) ON UPDATE NO ACTION ON DELETE NO ACTION) ...

但是当我尝试从我的模型CommonType($ this-&gt; find('all'))获取数据时,我在'on clause'上收到类似“未知列'CommonTypeDescription.type_description_id'的错误< /强>“

首先,我认为我必须将描述模型的主键声明为“id”,但它接缝,外键定义将覆盖来自关键模型的主键的蛋糕的命名约定。

非常感谢您的帮助和帮助;问候, 吉

PS。我已经更改了这篇文章的模型名称(如果存在类型错误)。因此,当我重命名关联表的主键时,一切正常,但我希望它们只能命名为“id”。

1 个答案:

答案 0 :(得分:0)

如何将CommonType模型更新为:

   'CommonTypeDescription' => array(
        'className' => 'CommonTypeDescription',
        'foreignKey' => 'common_type_id', //or try type_description_id if there's an error
        'dependent' => true
    )

然后在您的CommonTypeDescription模型上添加此关系,我认为您忘记添加属于CommonType模型的关系

    public $belongsTo = array(
        'CommonType' => array(
        'className' => 'CommonType ',
        'foreignKey' => 'common_type_id',
    ));