2016-12-14 8 views
0

내가 모델이 조인 : A[id, value], B[id, value]X[id, a_id]. XA이 포함되어 있고 B을 포함하고 싶습니다. 여기에서 B.value = A.value, ABvalue 필드가 고유하므로 하나의 행 관계 (있는 경우) 만 있습니다. 제가 어떤 시도 중첩 hasOne의 관계는

$this->X->find('all', array(
    'contain' => array(
     'A' => array('B') 
    ) 
)); 

1=1 WHERE 섹션가 SQL 로그에서 (양 측면) $belongsTo 연관

'B' => array(
    'foreignKey' => false, 
    'conditions' => array(
     'A.value = B.value' 
    ) 
) 

이었다.

단일 쿼리에서 joins을 사용하지 않고도 해결할 수 있습니까?

+0

뭔가가 분명하지 않거나 잘못되었습니다. 제발 말해주세요. – Sojtin

답변

0

당신은 CakePHP의 3.x를 들어

를 사용할 필요가

bindingKey : 외래 키 일치에 사용되는 현재 테이블의 컬럼의 이름. 지정하지 않으면 기본 키 (예 : 집필 테이블의 id 열)이 사용됩니다.

CakePHP의 2.x를 들어 http://book.cakephp.org/3.0/en/orm/associations.html

public $belongsTo = [ 
    'B' => [ 
     'foreignKey' => 'status', 
     'bindingKey'=>'status', 
    ] 
]; 

에서 언급 한 바와 같이

associationForeignKey : 다른 모델에서 발견 된 외부 키의 이름. 여러 HABTM 관계를 정의해야하는 경우 특히 유용합니다. 이 키의 기본값은 다른 모델의 단일 이름 인 밑줄로 '_id'접미사입니다. http://book.cakephp.org/2.0/en/models/associations-linking-models-together.html

public $belongsTo = [ 
    'B' => [ 
     'foreignKey' => 'status', 
     'associationForeignKey'=>'status', 
    ] 
]; 

에서 언급 한 바와 같이이 그래서 당신은이 문서에 언급로 2 재귀를 정의해야

는 또한 기본 재귀 수준이 1 떨어져 있음을 알아 당신을 위해

작동합니다 http://book.cakephp.org/2.0/en/models/model-attributes.html#recursive

$this->X->find('all', array(
    'recursive' => 2, 
)); 
+0

불행히도 2.x 버전의 'bindingKey'는 없습니다. – Sojtin

+0

@Sojtin cakephp 버전 2.x 및 3.x에 대한 답변을 업데이트했습니다 –

+0

@Sojtin 귀하의 코드가 cakephp 2.x 인 경우 어떻게 당신의 코드에 cakephp 3.x –