CakePHP从多个模型中获取数据

时间:2010-09-07 14:47:49

标签: database cakephp database-design schema

在我的CakePHP应用程序中,我有一个名为“Customer”的模型,它描述了(不出所料)个人客户。然后,我有一个关于销售的“销售”模型。 (每个销售一个客户,每个客户很多销售)。然后每次销售都有一个'car_id'(映射到'Car'模型)和'engine_id'(映射到'Engine model')。目前,当我获得一个客户的详细信息时,它会提取与该客户相关的每笔销售的详细信息,但我希望更深入一步,并为每次销售提供每辆车和每台发动机的详细信息。我该怎么做?

我理解模型之间的关系,但我显然遗漏了一些东西。我目前的设置是这样的......

Customer: $hasMany = 'Sales';

Sale: $hasOne = array('Car', 'Engine');

显然,'Car'和'Engine'没有关联的sale_id,因为它们可以属于许多不同的销售。

3 个答案:

答案 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'))
));