Yii2如何在afterSave中重新保存模态
Posted
技术标签:
【中文标题】Yii2如何在afterSave中重新保存模态【英文标题】:Yii2 how to resave the modal in afterSave 【发布时间】:2018-05-17 01:12:42 【问题描述】:我里面有一个 ProductOffer 模型,我使用 afterSave 来生成优惠券。
现在状态为空,我想在保存后更新它。
public function afterSave($insert, $changedAttributes)
if (floatval($this->offer) >= floatval($this->product->threshold_price))
$coupon = false;
$createCoupon = "";
$ctr = 1;
while ($coupon == false)
$createCoupon = $this->createCoupon(
"Offer for " . $this->customer_name . ' #' . $this->id,
$this->product->sale_price - $this->offer,
$this->product_id
);
if ($createCoupon || $ctr > 3)
$coupon = true;
$ctr++;
$this->status = self::STATUS_ACCEPTED_COUPON_GENERATED;
$this->coupon_code = $createCoupon->code;
// todo this
// echo "Accepted automatically then send email to customer as the same time to merchant email";
else
$this->status = self::STATUS_REJECTED;
return parent::afterSave($insert, $changedAttributes);
所以在afterSave这里我想更新记录状态并保存优惠券代码。
我不想做的就是这样。
public function afterSave($insert, $changedAttributes)
// So basically I want to update the status in afterSave
$this->status = "What ever value rejected or accepted it depends of the outcome of generating coupon";
$this->coupon = "AddTheCoupon";
// Save or Update
$this->save();
return parent::afterSave($insert, $changedAttributes);
但这似乎对我不起作用,如果你要分析它,它似乎会无休止地更新数据,因为每次 save() 都会通过 afterSave()。
还有其他方法吗?
谢谢!
【问题讨论】:
【参考方案1】:您应该使用 updateAttributes 方法,该方法会跳过所有事件。
参见参考updateAttributes(['some_field'])。
/** After record is saved
*/
public function afterSave($insert, $changedAttributes)
parent::afterSave($insert, $changedAttributes);
$this->some_field = 'new_value';
$this->updateAttributes(['some_field']);
【讨论】:
没有使用return true
,因为afterSave()
是void类型。 source以上是关于Yii2如何在afterSave中重新保存模态的主要内容,如果未能解决你的问题,请参考以下文章
在使用pjax重新加载gridview后,在gridview上的Yii2模态表单更新没有显示
如何在 Cake 上做一个全局模型 afterSave()?