如何为自加入关联定义唯一别名



我是个新手。我设计了一个mysql数据库,其中包含一个InnoDB表CompetitionRegions,其中有一个外键引用该表本身。外键约束已到位。

蛋糕烘焙无法自动生成正确的代码,因为自联接表别名与第一个别名相同:

SQLSTATE[42000]:语法错误或访问冲突:1066不是唯一的表/别名:"CompetitionRegions"

SELECT CompetitionRegions.id AS `CompetitionRegions__id`, CompetitionRegions.name AS `CompetitionRegions__name`, CompetitionRegions.parent_competition_region_id AS `CompetitionRegions__parent_competition_region_id` FROM competition_regions CompetitionRegions LEFT JOIN competition_regions CompetitionRegions ON CompetitionRegions.id = (CompetitionRegions.parent_competition_region_id) LIMIT 20 OFFSET 0

我该如何解决此问题?

类CompetitionRegionsTable::initialize包含以下内容:

$this->belongsTo('CompetitionRegions', [
        'foreignKey' => 'parent_competition_region_id'
    ]);

有没有一种方法可以指定用于自联接子查询的别名?

第一个参数用作别名,因此您必须更改它。为了让CakePHP仍然使用CompetitionRegionsTable类,您需要通过className选项指定它。

$this->belongsTo('ParentCompetitionRegions', [
    'className' => 'CompetitionRegions',
    // the foreign key options isn't actually necessary with a matching alias
    'foreignKey' => 'parent_competition_region_id'
]);

另请参阅Cookbook>数据库访问&ORM>关联>将表链接在一起

[…]如您所见,通过指定className键,可以将同一个表用作同一表的不同关联。您甚至可以创建自关联表来创建父子关系〔…〕

我无法让它单独使用ndm提出的解决方案。它给出了另一个问题(ParentCompetitionRegions关联不存在),我可能无法解决,因为我对CakePHP没有任何经验。

经过更多的研究,我所要做的就是将外键从parent_competition_regio_id重命名为parent_id。显然,在这种情况下,蛋糕烘焙得到了一个自我参照领域的想法。

最新更新