CakePHP - 访问beforeSave中的关联模型

时间:2012-02-16 15:31:06

标签: cakephp cakephp-2.0

在我的应用程序中引用属于一个产品,而产品又属于一种材料。由于我无法获得产品模型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;
}

2 个答案:

答案 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;
}