2

我的 Yii2 模型的 AfterSave 函数中有这个奇怪的错误

当我这样做时

public function afterSave($insert, $changedAttributes) {
    parent::afterSave($insert, $changedAttributes);
    if(!$insert):
        print_r($changedAttributes);exit;
        $this->prepareMail(self::MAIL_APPROVE);
    ;
}

我明白了

Array ( 
 [reason_for_travel] => 1 [project_id] => [billable] => 1  
 [advance_required] => 0 [status] => 2  ) // See it contains 'status'

但是当我这样做时

public function afterSave($insert, $changedAttributes) {
    parent::afterSave($insert, $changedAttributes);
    if(!$insert):
        $status = $changedAttributes['status']; // this line shows error
        if($status == Self::STATUS_CONFIRMED):
           $this->prepareMail(self::MAIL_APPROVE);
        ;
    ;
}

$status = $changedAttributes['status']; 此行显示错误

错误是“未定义的索引:状态”

我没看到什么?

4

2 回答 2

3

使用这行:

if(!$insert):
  $status = isset($changedAttributes['status']) ? $changedAttributes['status'] : 0); // this line shows error
    if($status == Self::STATUS_CONFIRMED):
       $this->prepareMail(self::MAIL_APPROVE);
    ;
;

$changedAttributes 包含已修改字段的旧值,但仅包含已修改字段,如果存在“isset”跳过错误则有效。

于 2016-08-04T21:25:07.647 回答
0

保存后如何检查属性是否已更改

public function afterSave($insert, $changedAttributes){
    //isAttributeChangedAfterSave
    var_dump(array_key_exists('name', $changedAttributes) && $this->name != $changedAttributes['name']);

    //...
}

请注意isAttributeChanged()这不起作用,afterSave()因为保存后,$this->oldAttributes被分配了新值。

于 2021-10-01T10:27:36.023 回答