cakephp - CakePHP:如何使用同一张表设置 BelongsToMany?
问题描述
我有一个名为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 实体,没有来自数据库的属性和值。
那么,建立这种关联的正确方法是什么?
解决方案
解决方案是:
$this->belongsToMany('ProcessoAssociado',
[ 'className'=>'ProcessoAdministrativo' ])
->setTargetForeignKey('processo_administrativo_associado_id')
->setForeignKey('processo_administrativo_id')
->setThrough('processo_administrativo_processo_administrativo');
推荐阅读
- javascript - 如何在 React.js 中的函数期间创建警报?
- angular - Docker /bin/sh: 1: ng: 未找到 (Angular)
- huawei-mobile-services - Unity访问华为SDK遇到问题,import agconnect-services.json无法读取
- javascript - 类声明 - 自定义错误消息
- flutter - 异步等待不等待完成
- c# - 以编程方式 (C#) 更新 QC/ALM 测试计划 > 测试脚本选项卡内容
- vue.js - [Vue 警告]:渲染错误:“TypeError:post.text.toLowerCase 不是函数”
- android-studio - Android Studio 终端无法打开/工作
- python - Discord.py:为什么欢迎和再见消息重复?
- javascript - JavaScript:在for循环中遍历数组?