2014-11-02 66 views
1

這可能是一個非常基本的問題,但我無法圍繞它解決這個問題,如何正確解決這個問題。將相同的模型兩次鏈接到CakePhp中的另一個模型

在我的應用程序中,我有擁有多個地址並具有不同用途的用戶。例如,用戶可以擁有一個地址和一個發票地址。我想要將這兩個地址存儲在同一個表(地址模型)中,然後將它們分配給一個用戶。

相應的模型看起來是這樣的:

地址:

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

和用戶:

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

當用戶將有一個地址,我想補充一個USER_ID作爲地址模型的外鍵,並完成它。但很明顯,CakePhp必須以不同的方式區分地址和發票地址。

在我腦海中的解決方案是像添加ADDRESS_ID和invoice_address_id到用戶表,但我似乎無法得到它以任何方式工作。

回答

2

如果您想在您的用戶表中添加相關字段,那麼最好以下面的形式添加它們address_user_idinvoice_address_user_id。然後,你必須在你的用戶模型屬於關聯關係,看起來像:

public $belongsTo = array(
    'Address' => array(
     'className' => 'Address', 
     'foreignKey' => 'address_user_id', 
    ), 
    'InvoiceAddress' => array(
     'className' => 'Address', 
     'foreignKey' => 'invoice_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 $hasOne = array(
    'User' => array(
     'className' => 'User', 
     'foreignKey' => 'address_user_id', 
    ), 
    'InvoiceUser' => array(
     'className' => 'User', 
     'foreignKey' => 'invoice_address_user_id', 
    ) 
); 
+0

感謝您的時間!這確實是正確的解決方案。語義感覺有點彆扭,用戶就現在屬於一個地址,而不是周圍的其他方法,但我可能只是解釋不同的可能關係,望文生義。 – 2014-11-04 08:41:13

相關問題