如何解决Cakephp 3 - 关联:同一个表中的 3 个前键
我有 2 个表,BAR
和 UNTRS
,UNTRS 有 3 个 FK (BARR_1,BARR_2 & BARR_3)
引用 BAR.COD_ID (primary key)
。
但是每个 FK 都引用了不同的 BAR 行。
我正在尝试建立一个关联,从而产生一个带有 JOIN 的 SQL 查询:
LEFT JOIN UNTRS ON (
UNTRS.BARR_1 = (BAR.COD_ID)
OR UNTRS.BARR_2 = (BAR.COD_ID)
OR UNTRS.BARR_3 = (BAR.COD_ID)
);
或者类似的东西:
LEFT JOIN UNTRS UNTRS_1 ON UNTRS_1.BARR_1 = BAR.COD_ID
LEFT JOIN UNTRS UNTRS_2 ON UNTRS_2.BARR_2 = BAR.COD_ID
LEFT JOIN UNTRS UNTRS_3 ON UNTRS_3.BARR_3 = BAR.COD_ID
我已经试过了:
BARTable.php:
$this->belongsTo('UNTRS',[
'className' => 'UNTRS','bindingKey' => ['BARR_1','BARR_2','BARR_3'],'foreignKey' => ['COD_ID','COD_ID','COD_ID'],'strategy' => 'join','joinType' => 'LEFT','propertyName' => 'unidade_transformadora_subestacao'
]);
这是SQL查询中JOIN的结果:
LEFT JOIN UNTRS UnidadesTransformadorasSubestacaoModulo10 ON (
UnidadesTransformadorasSubestacaoModulo10.BARR_1 = (BarramentosModulo10.COD_ID)
AND UnidadesTransformadorasSubestacaoModulo10.BARR_2 = (BarramentosModulo10.COD_ID)
AND UnidadesTransformadorasSubestacaoModulo10.BARR_3 = (BarramentosModulo10.COD_ID)
);
我也试过这个:
BARTable.php
$this->belongsTo('UNTRS_1','foreignKey' => ['COD_ID'],'bindingKey' => ['BARR_1'],'propertyName' => 'unidade_transformadora_subestacao_primeira'
]);
$this->belongsTo('UNTRS_2','bindingKey' => ['BARR_2'],'propertyName' => 'unidade_transformadora_subestacao_segunda'
]);
$this->belongsTo('UNTRS_3','bindingKey' => ['BARR_3'],'propertyName' => 'unidade_transformadora_subestacao_terceira'
]);
使用该代码,cakephp
不会对结果 SQL 查询进行 JOIN。
编辑: 我也试过这个代码:
UNTRSTable.php
$this->hasMany('UNTRS1',[
'className' => 'UnidadesTransformadorasSubestacaoModulo10','bindingKey' => 'BARR_1','foreignKey' => 'COD_ID','propertyName' => 'untrs1'
]);
$this->hasMany('UNTRS2','bindingKey' => 'BARR_2','propertyName' => 'untrs2'
]);
$this->hasMany('UNTRS3','bindingKey' => 'BARR_3','propertyName' => 'untrs3'
]);
同样,查询不包含 JOINS。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。