1

我有属于一个Category的Transactions并且可以有一个FuelupFuelup 属于CarTransaction:_

class Transaction extends AppModel {
    public $belongsTo = array('Category');
    public $hasOne = array('Fuelup');
}

class Fuelup extends AppModel {
    public $belongsTo = array('Transaction','Car');
}

class Car extends AppModel {
        public $hasMany = array('FuelUp');
}

class Category extends AppModel {
    public $hasMany = "Transaction";
}

我的表格如下所示:

transactions id|category_id|description
categories   id|name
cars         id|name|numberplate
fuelups      transaction_id|car_id|amount|mileage

在事务的索引函数中,我想索引所有事务并显示(如果存在)Fuelup:

public function index() {
     $this->set('transactions', $this->Transaction->find('all'));
}

如何在此视图中访问汽车的名称?我可以毫无问题地使用 $transaction['Fuelup']['car_id'] ,但无法访问 $transaction['Fuelup']['Car'] 等。

我正在运行最新版本的 CakePHP 2.3.1。

4

2 回答 2

3

与其使用 Hugo 指定的递归,不如研究Containable行为。你AppModel像这样附加它:

class AppModel extends Model {
    public $recursive = -1; // disable recursive

    public $actsAs = array('Containable');
}

然后,当您进行查找时,您可以这样做:

class AppModel extends Model {
    $transactions = $this->Transaction->find('all', array(
        'contain' => array(
            'Fuelup' => array(
                'Car'
            )
        )
    ));
    $this->set('transactions', $transactions);
}

可包含的效率更高,因为它只获取您指定的数据,而递归将带回您不需要的数据,浪费资源。

于 2013-03-11T21:57:35.477 回答
2

您必须设置递归级别。你可以做 :

$this->find('all',array('recursive' => 2));

recursive 属性定义了 CakePHP 通过 find() 和 read() 方法获取关联模型数据的深度。

请参阅《烹饪书》中的此条目

于 2013-03-11T21:36:30.227 回答