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()?

如何从 afterSave 函数中获取解析用户

Yii2,如何将登录用户的用户名自动保存在另一个表中?

在 afterSave Yii 中使用 foreach 将动态值保存到另一个表/模型

在 Xcode 中使用 CoreData 从模态视图控制器重新加载视图