我有模特:A
[id, value]
,B
[id, value]
和X
[id, a_id]
。
我想在X
上找到包含A
并包含B
的{{1}},B.value = A.value
和A
B
字段都是唯一的,所以只有一个行关系(如果有的话)。
value
我尝试的是$this->X->find('all', array(
'contain' => array(
'A' => array('B')
)
));
关联(双方)
$belongsTo
在sql日志中,'B' => array(
'foreignKey' => false,
'conditions' => array(
'A.value = B.value'
)
)
部分中只有1=1
。
在单个查询中,是否有可能在不使用WHERE
的情况下解决它?
答案 0 :(得分:0)
你必须使用
对于cakephp 3.x
bindingKey:当前表中列的名称,用于匹配foreignKey。如果未指定,则为主键 (例如,Article表的id列)将被使用。
正如http://book.cakephp.org/3.0/en/orm/associations.html
中所述public $belongsTo = [
'B' => [
'foreignKey' => 'status',
'bindingKey'=>'status',
]
];
对于cakephp 2.x
associationForeignKey:在另一个中找到的外键的名称 模型。如果您需要定义多个HABTM,这将特别方便 关系。此键的默认值为下划线, 另一个模型的单数名称,后缀为'_id'。
正如http://book.cakephp.org/2.0/en/models/associations-linking-models-together.html
中所述public $belongsTo = [
'B' => [
'foreignKey' => 'status',
'associationForeignKey'=>'status',
]
];
这对你有用
另请注意,默认递归级别为1 因此,您必须在本文档中提及将递归定义为2 http://book.cakephp.org/2.0/en/models/model-attributes.html#recursive
$this->X->find('all', array(
'recursive' => 2,
));