在cakephp 3中无法解决孩子父母协会问题

时间:2015-04-15 15:29:01

标签: php cakephp parent-child cakephp-3.0

我的桌子上有一个父子关系:

mysql> desc features;
+---------------------+-------------+------+-----+-------------------+----------------+
| Field               | Type        | Null | Key | Default           | Extra          |
+---------------------+-------------+------+-----+-------------------+----------------+
| id                  | int(11)     | NO   | PRI | NULL              | auto_increment |
| featureID           | varchar(45) | NO   |     | NULL              |                |
| probeID             | int(11)     | YES  |     | NULL              |                |
| shortName           | varchar(45) | NO   |     | NA                |                |
| start               | int(11)     | NO   |     | NULL              |                |
| stop                | int(11)     | NO   |     | NULL              |                |
| strand              | int(11)     | NO   |     | NULL              |                |
| curatedManually     | varchar(45) | NO   |     | NA                |                |
| created             | timestamp   | NO   |     | CURRENT_TIMESTAMP |                |
| descriptions_id     | int(11)     | YES  | MUL | NULL              |                |
| features_types_id   | int(11)     | NO   | MUL | NULL              |                |
| chromosomes_id      | int(11)     | NO   | MUL | NULL              |                |
| species_id          | int(11)     | NO   | MUL | NULL              |                |
| strains_id          | int(11)     | NO   | MUL | NULL              |                |
| parents_features_id | int(11)     | YES  | MUL | NULL              |                |
+---------------------+-------------+------+-----+-------------------+----------------+

相应字段是parents_features_id和id,因为功能可以具有“子”特征或“父”特征。与这些字段建立了外键关系。

KEY `fk_features_Features1_idx` (`parents_features_id`),
  CONSTRAINT `fk_features_Features1` FOREIGN KEY (`parents_features_id`) REFERENCES `features` (`id`) ON DELETE NO ACTION ON UPDATE NO ACTION,

我使用“蛋糕烘焙所有功能”来创建所有必要的模型,控制器等。

当我打开功能页面时,我只收到错误消息“功能与ParentsFeatures无关”

我试图通过交换自动原始代码来解决它

$this->belongsTo('Features', [
            'foreignKey' => 'parents_features_id'
通过以下代码在Model / Table / FeaturesTable.php中获取此关系:

 $this->belongsTo('ParentsFeatures', [
        'className' => 'Features',
        'foreignKey' => 'parents_features_id'
    ]);
    $this->hasMany('ChildFeatures', [
        'className' => 'Features',
        'foreignKey' => 'parents_features_id'

但是我收到错误消息“功能与功能无关”

我有点卡在这里,非常感谢任何帮助来解决这个问题。

一切顺利 纳丁

1 个答案:

答案 0 :(得分:1)

更改表格中的关联不会改变烘焙控制器查询数据的方式,您也必须更改它们,或者重新烘焙代码。

但是,除非您开始遵循约定,即外键列parent_id的名称,否则这将永远不会正确烘焙,只有bake才能创建正确的关联(将命名为{{1}和ParentFeatures),当你在它时,考虑改变其他列名称(小写下划线)。

话虽如此,在重命名索引,创建和删除外键约束等(无法精确定位)之间可能会出现一个错误,然后导致用于ChildFeatures的错误关联名称控制器动作的contain调用,即烘焙将生成类似

的内容
find()

而不是

'contain' => ['Features']

用于烘焙表类中的关联。

但是我现在无法可靠地重现它。如果您遇到这种情况,可能需要report this as an issue over at GitHub

如果重新烘焙无法解决问题,请手动检查控制器操作中的'contain' => ['ParentFeatures'] 次调用,并将包含的关联更改为find()