我的桌子上有一个父子关系:
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'
但是我收到错误消息“功能与功能无关”
我有点卡在这里,非常感谢任何帮助来解决这个问题。
一切顺利 纳丁答案 0 :(得分:1)
更改表格中的关联不会改变烘焙控制器查询数据的方式,您也必须更改它们,或者重新烘焙代码。
但是,除非您开始遵循约定,即外键列parent_id
的名称,否则这将永远不会正确烘焙,只有bake才能创建正确的关联(将命名为{{1}和ParentFeatures
),当你在它时,考虑改变其他列名称(小写下划线)。
话虽如此,在重命名索引,创建和删除外键约束等(无法精确定位)之间可能会出现一个错误,然后导致用于ChildFeatures
的错误关联名称控制器动作的contain
调用,即烘焙将生成类似
find()
而不是
'contain' => ['Features']
用于烘焙表类中的关联。
但是我现在无法可靠地重现它。如果您遇到这种情况,可能需要report this as an issue over at GitHub。
如果重新烘焙无法解决问题,请手动检查控制器操作中的'contain' => ['ParentFeatures']
次调用,并将包含的关联更改为find()
。