我正在使用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']
我怎样才能解决这个问题,这让我疯狂!
答案 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;
}