cakePHP afterFind和Association值

时间:2012-02-15 13:28:41

标签: cakephp associations cakephp-2.0 cakephp-appmodel

我正在使用cakePHP 2.0 afterFind()回调在数据库值显示之前执行计算。

我有三种型号 - 材料,产品和报价。

每个产品都有一个材料,并且使用此关联在Product afterFind回调中执行计算,特别是使用以下行:

$results[$key]['Product']['material_cost'] = $results[$key]['Product']['material_mass'] * $val['Material']['cost'];

$val['Material']['cost']引用相关材料。

到目前为止一切都很好。

接下来,我的Quote模型中有一个afterFind()回调函数。报价与产品相关联,报价模型中的计算取决于产品模型中的计算 - 特别是用于评估材料的计算。

我可以在查询模型之后参考产品模型后找到结果就好了:$val['Product']['number_tools']

但是,现在Product模型找不到相关的材料,我收到错误: 未定义的索引:材料[APP / Model / Product.php,第126行] 在Product.php的第126行是

$val['Material']['cost'] 

我怎样才能解决这个问题,这让我疯狂!

1 个答案:

答案 0 :(得分:0)

您需要加载Material的模型。您可以从产品访问它的原因是它通过关系关联,并且您的递归默认情况下允许模型加载相关数据。所以在Quote模型beforeFind方法中,在开始解析数据之前,加载Material Model:

public function afterFind($results) {

    App::uses('Material', 'Model');
    $material = new Material();
    $materials = $material->find(...);

    foreach ($results as $key => $val) {
        // access $materials['Material']['cost']
    }
    return $results;
}