我有一个Yii项目(带有activerecord-relation-behavior),我创建了一个Order记录,然后我添加了一些连接产品。在此之前,一切正常,但我添加了一个功能,以处理运费和添加产品,根据其他产品的重量和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,得到所有价格的总和并将其保存到订单。
我的代码有什么问题,为什么Yii会删除我的新记录?
答案 0 :(得分: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,但是如果你的问题出现了问题,那么最终应该创建新记录,但不是在你的情况下,因为你说它已经被创建并在那之后被删除了。 / p>
我发布了这个答案来发布在我身边工作的复制代码,我认为有更多的东西你没有在这里发布,也许它只是引起了你的问题