这可能是一个非常基本的问题,但我无法解决它如何正确解决这个问题。
在我的应用程序中,我的用户拥有多个具有不同目的的地址。例如,用户可以拥有地址和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添加到User表中,但我似乎无法以任何方式使其工作。
答案 0 :(得分:2)
如果您想在用户表格中添加相关字段,则最好使用以下格式address_user_id
和invoice_address_user_id
添加它们。然后,您的用户模型中必须具有belongsTo关系,如下所示:
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',
)
);