Cakephp 嵌套hasOne与自定义主键的关系在不使用联接的情况下解决

Cakephp 嵌套hasOne与自定义主键的关系在不使用联接的情况下解决,cakephp,relationship,cakephp-2.4,Cakephp,Relationship,Cakephp 2.4,我有几种型号:A[id,value],B[id,value]和X[id,A\u id]。 我想在XcontainA和containB中查找B.value=A.value,其中A和B值字段都是唯一的,因此只有一行关系(如果有的话) 我尝试的是$belongsTo关联(两侧) 在sql日志中,WHERE部分中只有1=1 是否有可能在单个查询中不使用联接来解决此问题?您必须使用 适用于cakephp 3.x bindingKey:当前表中用于匹配foreignKey的列的名称。如果未指定,则为主键 将

我有几种型号:
A
[id,value]
B
[id,value]
X
[id,A\u id]
。 我想在
X
contain
A
和contain
B
中查找
B.value=A.value
,其中
A
B
值字段都是唯一的,因此只有一行关系(如果有的话)

我尝试的是
$belongsTo
关联(两侧)

在sql日志中,
WHERE
部分中只有
1=1

是否有可能在单个查询中不使用
联接来解决此问题?

您必须使用

适用于cakephp 3.x

bindingKey:当前表中用于匹配foreignKey的列的名称。如果未指定,则为主键 将使用(例如Articles表的id列)

如中所述

适用于cakephp 2.x

associationForeignKey:在另一个数据库中找到的外键的名称 模型如果您需要定义多个HABTM,这尤其方便 关系。此键的默认值为下划线, 另一个模型的单数名称,后缀为“\u id”

如中所述

这对你有用

还请注意,默认递归级别为1 因此,您必须定义本文档中提到的2的递归


如果有什么不清楚或我遗漏了什么,请告诉我不幸的是2.x中没有这样的
bindingKey
version@Sojtin我已经更新了cakephp版本2.x和3的答案。x@Sojtin如果您的代码是cakephp 2.x,那么您如何在代码中使用contain for cakephp 3.x解决方案仍然不适用于我,没有错误,只是数据没有附加,只有空数组。我为整个项目设置了
recursive
集合
-1
$this->X->find('all', array(
    'contain' => array(
        'A' => array('B')
    )
));
'B' => array(
    'foreignKey' => false,
    'conditions' => array(
        'A.value = B.value'
    )   
)
public $belongsTo = [
    'B' => [   
        'foreignKey' => 'status',
        'bindingKey'=>'status',
    ]
];
public $belongsTo = [
    'B' => [   
        'foreignKey' => 'status',
        'associationForeignKey'=>'status',
    ]
];
$this->X->find('all', array(
    'recursive' => 2,
));