Yii2 AR save(),insert(),update()浅剖析

先来看看save()方法:

public function save($runValidation = true, $attributeNames = null)
{
    if ($this->getIsNewRecord()) {
        return $this->insert($runValidation, $attributeNames);
    }

    return $this->update($runValidation, $attributeNames) !== false;
}

save()方法中,先判断是否是新增记录,新增记录执行insert()方法,更新记录执行update(),所以这个方法指示一个中转站。

insert()方法,执行数据库插入操作,返回一个boolean值,也没什么要说的。

update()方法,该方法最后调用了updateAll()方法,如果更新失败,返回false值,但是如果更新成功,返回的是受影响的行数,如果数据没有发生任何变化(不包含值的类型发生改变),则返回的是一个0值,

save()方法在更新的时候,返回值与false进行严格比较,返回0也表示更新成功。