php - 无法解决 cakephp 3 中的子父关联

标签 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,

我使用“cake bake all features”来创建所有必要的模型、 Controller 等。

当我打开功能页面时,我只收到错误消息“功能与 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'

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

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

一切顺利 纳丁

最佳答案

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

但是,除非您开始遵循约定,否则这将永远无法正确烘焙,即将外键列命名为 parent_id ,只有这样 bake 才能创建正确的关联(将被命名为 ParentFeaturesChildFeatures ),并且在您这样做的同时,考虑也更改其他列名称(小写下划线)。

也就是说,在重命名索引、创建和删除外键约束等之间的某处可能会出现一个错误(无法查明),然后导致错误的关联名称用于 containfind()调用 Controller Action ,即烘焙将生成类似

'contain' => ['Features']

代替

'contain' => ['ParentFeatures']

它用于烘焙表类中的关联。

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

如果重新烘焙无法解决问题,请手动检查 find()调用您的 Controller 操作并将包含的关联更改为 ParentFeatures .

关于php - 无法解决 cakephp 3 中的子父关联,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29654388/

相关文章:

php - PHP 变量字符串中的 IF/ELSE 语句

Php - 根据百分比计算数字,如何在 2 个小数位数后降低所有精度?

php 将 Excel 工作表导入 mysql cakephp 1.3

cakephp - 如何配置CakePHP以检测我的开发/生产环境,还是只将配置文件置于版本控制之外?

javascript - jQuery 第二个 child

c++ - 如何在树结构中从子节点移动到父节点?

php - 是否有基于 PHP 的 Python Nose 实现?

php - 如何使用 PHP 从 Paypal 立即购买按钮接收回调

cakephp 单选按钮字段已选择

python - 如何存储和检索父子依赖数据(Maya MEL/Python 脚本)