在我的应用程序中引用属于一个产品,而产品又属于一种材料。由于我无法获得产品模型afterFind数组,以便在从Quote模型访问它时包含该材料,我已将Quote直接与材料相关联。
我现在遇到的问题是报价的material_id需要根据为报价选择的产品自动保存
即。在将Quote保存到数据库之前,从所选产品中提取Product.material_id的值并自动将其保存到Quote.material_id字段。
我对cakePHP很新。有谁知道如何做到这一点?
编辑:
这是一个帮助解释的例子。在我的报价模型中,我可以:
public function beforeSave($options) {
$this->data['Quote']['material_id'] = 4;
return true;
}
但是我需要做更像这样的事情:
public function beforeSave($options) {
$this->data['Quote']['material_id'] = $this->Product['material_id'];
return true;
}
答案 0 :(得分:3)
我很震惊,这还没有得到妥善回答......
Oldskool的回答是半正确的,但并不完全正确。使用“$ this-> Quote”是不正确的,因为beforeSave函数本身驻留在Quote类中。我将用一个例子来解释。
- >我们有一个订阅模型属于 SubscriptionsPlan
- >型号 SubscriptionsPlan hasMany 嫌疑人
要访问订阅模型中 beforeSave 功能中的 SubscriptionsPlan 数据,您需要执行以下操作:
public function beforeSave($options = array()){
$options = array(
'conditions' => array(
'SubscriptionsPlan.subscriptions_plan_id' => $this->data[$this->alias]['subscriptions_plan_id']
)
);
$plan = $this->SubscriptionsPlan->find('first', $options);
//REST OF BEFORE SAVE CODE GOES HERE
return true;
}
答案 1 :(得分:0)
它应该可以通过使用find来实现。
public function beforeSave($options) {
// Assuming your Product model is associated with your Quote model
$product = $this->Quote->Product->find('first', array(
'conditions' => array(
'Product.material_id' => $this->data['Quote']['material_id']
)
));
$this->data['Quote']['material_id'] = $product['material_id'];
return true;
}