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
containA
和containB
中查找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,
));