2014-11-02 76 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

相关问题