0

我有一个 Yii 项目(带有 activerecord-relation-behavior),我在其中创建了一个订单记录,并向其中添加了一些连接的产品。到目前为止,一切正常,但我添加了一个功能,处理运费并添加产品,基于其他产品的重量,Yii 创建并立即删除该新记录。

第一个版本:

$new = new Order;
$new->save();
foreach (explode('-', $order['products']) as $product) {
  $op = new OrderProduct();
  $op->order = $new;
  $op->save();
}
$new->save();

新版本:

$new = new Order;
$new->save();
foreach (explode('-', $order['products']) as $product) {
  $op = new OrderProduct();
  $op->order = $new;
  $op->save();
}
$new->save();
$new->update();

$op = new OrderProduct(); // shipment record
$op->order = $new;
$op->save(); //until this point, this works until I add the next line

$new->save(); // This deletes the new record.

Order 类中的 beforeSave():

public function beforeSave(){
    $sum = 0;
    foreach ($this->items as $op) {
        $sum += ($op->unit_price + $op->unit_price * ($op->vat / 100)) * $op->quantity;
    }

    $this->final_cost = $sum;
    return true;
}

我不知道为什么,但最后一行删除了新记录。

我需要将总成本保存到订单中,所以无论如何我都必须保存它。现在我有一个beforeSave()方法,它计算所有 OrderProduct-s,获取所有价格的总和并将其保存到 Order。

我的代码有什么问题,为什么 Yii 会删除我的新记录?

4

1 回答 1

0

我已按照您的步骤操作,但无法复制问题。记录没有被删除。让我们看看我的例子。

$new = new Order;
        $new->label = 'order 1';
        $new->save(false);

        $op = new OrderProduct();
        $op->label = '1st op';
        $op->order = $new;
        $op->save(false);

        $new->save(false);
        $new->update(false);

        $op = new OrderProduct(); 
        $op->label '2nd op';
        $op->order= $new;
        $op->save(false); 

        $new->save();

//Until now, I have 1 record Order and 2 Order Products, nothing has been removed.

我不使用 beforeSave,但是如果您的记录有问题,最终甚至应该创建新记录,但在您的情况下不是,因为您说它是在那之后创建和删除的。

我发布了这个答案来发布对我有用的复制代码,我认为还有更多你没有在这里发布的东西,也许它只是引起了你的问题

于 2013-08-08T19:16:18.520 回答