2014-11-02 5 views
1

아마도 매우 기본적인 문제 일 수 있습니다. 그러나이 문제를 올바르게 해결할 수있는 방법은 내 머리를 감쌀 수 없습니다.CakePhp에서 동일한 모델을 다른 모델에 두 번 연결하십시오.

내 응용 프로그램에는 다른 용도로 여러 주소를 가진 사용자가 있습니다. 예를 들어 사용자는 주소와 InvoiceAddress를 가질 수 있습니다. 두 주소를 동일한 테이블 (주소 모델)에 저장 한 다음 한 사용자에게 할당하려고합니다.

각각의 모델

은 같은 모양 :

주소 :

public $belongsTo = array(
    'Address' => array(
     'className' => 'Address', 
    ), 
    'InvoiceAddress' => array(
     'className' => 'Address', 
    ), 
); 

그리고 사용자 : 사용자가 하나 개의 주소를했을 때

public $hasOne = array(
    'Address' => array(
     'className' => 'Address', 
    ), 
    'InvoiceAddress' => array(
     'className' => 'Address', 
    ), 
); 

, 나는 같은 USER_ID를 추가 할 것 Address 모델에 외래 키를 지정하고이를 수행하십시오. 하지만 분명히 CakePhp가 주소와 송장 주소를 구분할 수 있도록 다르게해야합니다.

내 마음에 솔루션은 사용자 테이블에 address_id 및 invoice_address_id를 추가하는 것과 비슷하지만 어떤 방식 으로든 작동하지는 못합니다.

답변

2

사용자 테이블에 관련 필드를 추가하려면 address_user_idinvoice_address_user_id 형식으로 추가하는 것이 좋습니다. 다음 명령 $this->User->find('all');을 실행할 때 그래서 결과는 당신이해야 관계 주소 모델에서 다음

$result = array(0 => 
       array('User' => array(...), 
         'Address' => array(...), // it will bring only one address row 
         'InvoiceAddress' => array(...) // it will bring only one address row 
       ), 
       1 => ... 
       2 => ... 
     ); 

될 것

public $belongsTo = array(
    'Address' => array(
     'className' => 'Address', 
     'foreignKey' => 'address_user_id', 
    ), 
    'InvoiceAddress' => array(
     'className' => 'Address', 
     'foreignKey' => 'invoice_address_user_id', 
    ), 
); 

: 그럼 당신과 같은 사용자 모델의 belongsTo를 관계가 있어야합니다 다음을 추가하십시오 :

public $hasOne = array(
    'User' => array(
     'className' => 'User', 
     'foreignKey' => 'address_user_id', 
    ), 
    'InvoiceUser' => array(
     'className' => 'User', 
     'foreignKey' => 'invoice_address_user_id', 
    ) 
); 
+0

시간 내 주셔서 감사합니다! 이것은 실제로 올바른 해결책이었습니다. 의미 상으로는 사용자가 이제는 다른 방법 대신 주소에 속하는 것이 다소 어색하다고 느껴지 긴하지만, 나는 문자 그대로 다른 가능한 관계를 해석하고있을뿐입니다. –

관련 문제