0

各タイプのアソシエイト (別のテーブル) に価格がある製品テーブルがあります。

これにより、テーブルに移動します。

# product

# associate_types
## description

# associate_prices
## product_id
## associate_type_id
## price

製品のモデル関係:

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

アソシエイト価格:

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

今、製品フォームで、ユーザーがすべての AssociateTypes の価格を入力するために、すべての種類の AssociateTypes を表示しています。これをうまく管理しました。次にそれらを交差させます。

これらのエントリを更新/作成するために、製品の 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;
}
4

1 に答える 1

1

Update v2.0 新しいモデル インスタンスが正しくありません。モデルを初期化するためのnewキーワードを書きませんでした。

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

それは違いない:

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

更新 データベースに保存できるように、新しいモデル インスタンスを作成します。

    $pricesDup = new PriceDup;</strike>

属性の割り当てを忘れていませんか? このような: $model->attributes=$_POST['attributes'];

于 2013-06-12T05:13:29.353 に答える