在我的CakePHP应用程序中,我有一个名为“Customer”的模型,它描述了(不出所料)个人客户。然后,我有一个关于销售的“销售”模型。 (每个销售一个客户,每个客户很多销售)。然后每次销售都有一个'car_id'(映射到'Car'模型)和'engine_id'(映射到'Engine model')。目前,当我获得一个客户的详细信息时,它会提取与该客户相关的每笔销售的详细信息,但我希望更深入一步,并为每次销售提供每辆车和每台发动机的详细信息。我该怎么做?
我理解模型之间的关系,但我显然遗漏了一些东西。我目前的设置是这样的......
Customer: $hasMany = 'Sales';
Sale: $hasOne = array('Car', 'Engine');
显然,'Car'和'Engine'没有关联的sale_id,因为它们可以属于许多不同的销售。
答案 0 :(得分:1)
查看可包含的行为,它应该让您完成所需的一切: http://book.cakephp.org/view/1323/Containable
在这种情况下,一旦在模型上启用containsable,就可以执行以下操作:
$this->Customer->find('first', array(
conditions -> array(
'id' -> $customer_id),
contain -> array(
'Sale' -> array(
'Car', 'Engine'))));
您还可以为包含内的每个模型指定所需的字段和条件。
答案 1 :(得分:1)
据我了解,您的关系如下:
Customer -> Sale -> Car -> Engine
线性,意味着除了通过销售,汽车与客户无关。如果这是正确的,您只需要在每个模型中设置关系,以便正确识别它们:
Customer hasMany Sale
Sale belongsTo Customer
Sale hasMany Car
Car belongsTo Sale
Car hasMany Engine
Engine belongsTo Car
然后,当您查询数据库时,您可以执行以下操作:
$this->Customer->find('first', array(
'conditions' => array('id' => $ID),
'recursive' => 1 // or 2 depending on your need
)
);
这样您就可以轻松地深入了解数据。
在此处详细了解:http://book.cakephp.org/view/73/Retrieving-Your-Data
答案 2 :(得分:0)
我认为您的模型关系(和cdburgess)是错误的。它应该是这样的:
Customer hasMany Sale
Sale belongsTo Customer
Car hasMany Sale
Sale belongsTo Car
Engine hasMany Sale
Sale belongsTo Engine
然后,您可以使用Containable行为来检索所有相关数据:
$this->Customer->Behaviors->attach('Containable');
$this->recursive = -1;
$this->Customer->find('first', array(
'conditions' => array('id' => $ID),
'contain' => array('Sale' => array('Car', 'Engine'))
));