首页 > 解决方案 > CakePHP:如何使用同一张表设置 BelongsToMany?

问题描述

我有一个名为processo_administrativo的表,它通过processo_administrativo_processo_administrativo拥有并属于许多processo_administrativo

两个表都有 id "identity(1,1)"

连接表processo_administrativo_processo_administrativo具有以下列:

在此处输入图像描述

processo_administrativo_idprocesso_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 实体,没有来自数据库的属性和值。

那么,建立这种关联的正确方法是什么?

标签: cakephpassociationshas-and-belongs-to-many

解决方案


解决方案是:

     $this->belongsToMany('ProcessoAssociado', 
    [ 'className'=>'ProcessoAdministrativo' ])
 ->setTargetForeignKey('processo_administrativo_associado_id') 
->setForeignKey('processo_administrativo_id') 
->setThrough('processo_administrativo_processo_administrativo');

推荐阅读