【发布时间】:2020-06-27 19:12:01
【问题描述】:
我有一个名为 processo_administrativo 的表,它拥有并属于许多 processo_administrativo 到 processo_administrativo_processo_administrativo
两个表的 id 为“identity(1,1)”
连接表 processo_administrativo_processo_administrativo 有这些列:
processo_administrativo_id 和 processo_administrativo_associado_id 都引用了 processo_administrativo.id
所以,我在 ProcessoAdministrativoTable 上试过这个:
$this->belongsToMany('ProcessoAdministrativo', [
'targetForeignKey'=> 'processo_administrativo_associado_id',
'foreignKey'=> 'processo_administrativo_id'
])
->setThrough('ProcessoAdministrativoProcessoAdministrativo');
并尝试使用包含:
$result = $paTable->find()->contain('ProcessoAdministrativo')
->where(['id IN'=>[2947,3694]])
->toArray();
debug($result);
但是 Cake 这样做了(在第二个查询中):
....
FROM
processo_administrativo ProcessoAdministrativo
INNER JOIN processo_administrativo_processo_administrativo ProcessoAdministrativoProcessoAdministrativo ON ProcessoAdministrativo.id = (
ProcessoAdministrativoProcessoAdministrativo.processo_administrativo_id
)
WHERE
ProcessoAdministrativoProcessoAdministrativo.processo_administrativo_id in (2947, 3694)
如您所见,出于某种原因,CakePHP 只是忽略了 targetForeignKey (processo_administrativo_associado_id)。我不知道为什么。
结果是两个 ProcessoAdministrativo 实体,没有来自数据库的属性和值。
那么,建立这种关联的正确方法是什么?
【问题讨论】:
标签: cakephp associations has-and-belongs-to-many