嵌套的hasOne关系与自定义主键解决而不使用连接

时间:2016-12-14 12:19:51

标签: cakephp relationship cakephp-2.4

我有模特:A [id, value]B [id, value]X [id, a_id]。 我想在X上找到包含A并包含B的{​​{1}},B.value = A.valueA 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的情况下解决它?

1 个答案:

答案 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,
));