保存相关模型的多个实例(has_many)

时间:2013-06-11 17:49:32

标签: activerecord yii

我有一个产品表,对于每种类型的员工(另一张表)都有价格。

这让我想到了表格:

# product

# associate_types
## description

# associate_prices
## product_id
## associate_type_id
## price

产品的模型关系:

'prices' => array(self::HAS_MANY, 'AssociatePrices', 'id_product')

AssociatePrices:

'associateType' => array(self::BELONGS_TO, 'AssociateTypes', 'id_associate_type'),

现在,在产品表单上,我显示了各种AssociateTypes,以便用户填写所有AssociateTypes的价格,我很好地管理了这个:我正在获取associateTypes,已为此插入的价格给定产品然后穿过它们。

为了更新/创建这些条目,我在Product的afterSave()中有以下代码:

    if(isset($_POST['AssociatePrices'])) {
        $this->pricesDup = array(); // overwriting current price setting
        foreach ($_POST['AssociatePrices'] as $i => $price) {
            $this->pricesDup[$i] = AssociatePrices::model();
            $this->pricesDup[$i]->attributes = $price;
            $this->pricesDup[$i]->id_product = $this->id;
            $this->pricesDup[$i]->save(false);
        }
    }

$this->pricesDup是我刚刚制作的属性,因为我无法使用$this->prices

正在讨厌的是,即使save()方法返回true,数据库也保持不变。

我已经从yii框架论坛上阅读了很多内容,但实际上并没有将这些内容应用到我的案例中。我做错了什么?

非常感谢

编辑:Products模型还有一个beforeSave()函数,但它与此问题无关。即使我在这里根据要求发布(部分)。

/**
 * This function's mission is to handle the file upload.
 */ 
public function beforeSave() 
{
    parent::beforeSave();
    // File uploading
    if (is_object($this->image)) {
        $dir = PRODUCTS_FILES_PATH;

        $current = Yii::app()->getRequest()->getPost('currentImage');
        if (!empty($current))
            @unlink($dir.$current);

        $name = $this->image->name;
        $j = 1;
        while (file_exists($dir . $name)) {
            //....
        }
        $this->image->saveAs($dir.$name, true);
        $this->image = $name;
    }
    return true;
}

1 个答案:

答案 0 :(得分:1)

更新v2.0 您的新模型实例不正确。您没有编写 new 关键字来初始化模型。

$this->pricesDup[$i] = AssociatePrices::model();

必须是:

  $this->pricesDup[$i] = new AssociatePrices;

<强>更新 创建一个新的模型实例,以便将其保存在数据库中:

    $pricesDup = new PriceDup;</strike>

您是否忘记分配属性?像这样: $model->attributes=$_POST['attributes'];