首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

Yii 2 getOldAttribute()方法在afterSave中不起作用

Yii 2框架中的getOldAttribute()方法用于获取模型在保存之前的旧属性值。在afterSave事件中使用getOldAttribute()方法是不起作用的,因为该方法只能在beforeSave事件中使用。

在Yii 2框架中,模型的保存过程可以分为beforeSave、afterSave两个事件。beforeSave事件在保存之前触发,可以用于处理一些数据准备工作或者修改模型属性的值。而afterSave事件在保存之后触发,可以用于处理一些与保存操作相关的后续操作。

在afterSave事件中,模型的属性已经被保存到数据库中,getOldAttribute()方法无法获取到保存之前的旧属性值。如果需要在afterSave事件中获取旧属性值,可以在beforeSave事件中将旧属性值保存到模型的自定义属性中,然后在afterSave事件中通过访问自定义属性来获取旧属性值。

以下是一个示例代码:

代码语言:php
复制
class YourModel extends \yii\db\ActiveRecord
{
    public $oldAttributes = [];

    public function beforeSave($insert)
    {
        if (parent::beforeSave($insert)) {
            if (!$insert) {
                $this->oldAttributes = $this->getOldAttributes();
            }
            return true;
        }
        return false;
    }

    public function afterSave($insert, $changedAttributes)
    {
        parent::afterSave($insert, $changedAttributes);
        
        // 在afterSave事件中访问旧属性值
        $oldValue = $this->oldAttributes['attributeName'];
        
        // 其他操作...
    }
}

在上述示例中,我们在模型中定义了一个名为oldAttributes的属性,用于保存旧属性值。在beforeSave事件中,如果不是新记录(即更新操作),将旧属性值保存到oldAttributes属性中。然后在afterSave事件中,通过访问oldAttributes属性来获取旧属性值。

需要注意的是,getOldAttributes()方法返回的是模型在保存之前的旧属性值数组,数组的键是属性名,值是属性值。根据需要,可以替换attributeName为具体的属性名。

关于Yii 2框架的更多信息和相关产品,您可以参考腾讯云的官方文档和产品介绍:

页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

Yii2工作的一些方法技巧

作为自己的周总结,平时遇到的问题,以及一不小心踩的坑,记录下来自己当复习: 表单验证 表单验证,两个参数至少需要一个(2个以上): public function rules() {...方法1. 清理掉runtime下的cache缓存之后也可以正常使用这个字段。 方法2....获取url的host信息: # http://localhost Yii::$app->request->getHostInfo() 获取url的路径信息(不包含host和参数): Yii...全局Css添加以下样式: word-break:break-all; //只对英文起作用,以字母作为换行依据 eg: html, body { height: 100%; font-family...数据库结构 订单表order含有字段customer_id 与 客户表customer的id字段关联 首先确保Order Model包含以下代码: public function getCustomer

3.2K31

Yii2关于组件的注册以及创建的方法详解

这些组件的信息是引入进来的几个配置文件配置的,Yii组件就是使用这些参数信息进行注册与创建的。   ...),当赋值操作找不到components成员变量时会调用setComponents()方法,又去找这个方法的所在,终于它的祖先类\yii\di\ServiceLocator中找到了setComponents...哈哈,别忘了,php读取不到类属性的时候会调用魔术方法get(),所以开始查找\yii\web\Application继承关系最近的祖先类的get()方法,最后\yii\di\ServiceLocator...,调用\yii\BaseYii::createObject()方法进行组件创建,这个方法最终会调用依赖注入容器\yii\di\Container的get()方法,接着就是依赖注入创建对象的过程了,关于这个过程已经我的上一篇博文中讲解过了...,可以参考一下:yii2之依赖注入与依赖注入容器。

79821

YII2框架添加自定义模块的方法实例分析

本文实例讲述了YII2框架添加自定义模块的方法。分享给大家供大家参考,具体如下: 有些时候系统功能过于复杂,这时我们需要通过模块把一些功能区分开来,便于管理与维护。...我用的是Yii2的基本应用程序模板,程序其实已经给我们提供了一个模块,就是app本身。YII2是可以无限嵌套模块的。不过一般不要超过2层。...然后我们controllers里创建一个IndexController.php,views下创建index目录,并创建index.php IndexController.php代码如下: <?...最后我们还需要在config/web.php配置一个我们的模块,就可以访问了。...不过YII2的GII已经帮我们做好了生成模块的操作,不需要像上面那样那么麻烦自已配置。 通过访问/gii,或者?r=gii,来使用GII。 ?

1.2K20

YII2框架查询生成器Query()的使用方法示例

本文实例讲述了YII2框架查询生成器Query()的使用方法。分享给大家供大家参考,具体如下: YII2yii\db\Query给我们提供了非常丰富的方法,方便我们构建复杂的SQL语句。...php namespace app\controllers; use YII; use yii\db\Query; use yii\web\Controller; class TestController...extends Controller { public function actionTest() { //YII2的Query的使用 //Query与createCommand的区别是createCommand...name']) - from('{{%user}}') - where(['like', 'name', 'dd']) - all(); //between筛选和group by分组 //查找出age18...》、《php+mysql数据库操作入门教程》及《php常见数据库操作技巧汇总》 希望本文所述对大家基于Yii框架的PHP程序设计有所帮助。

1.3K50

【Struts】Struts2Action获得Servlet对象(RequestResponseSessionServletContext)的四种方法

参考自:http://blog.csdn.net/softimes/article/details/7084984 struts1.x Action 类的execute方法,有四个参数,其中两个就是...而在Struts2,并没有任何参数。 因此,就不能简单地从execute方法获得HttpServletResponse或HttpServletRequest对象了。...但在Struts2 Action类仍然有很多方法可以获得这些对象。 下面就列出四种获得这些对象的方法。...1、Action继承Struts2 的Servlet*Aware 拦截器 这种方式要求Action继承org.apache.struts2.interceptor对应的对象,如:HttpServletResponse...例如我们希望使用在MyAction类HttpServletResponse对象,则代码如下: 1 import com.opensymphony.xwork2.ActionSupport; 2 import

39420

【SLAM】开源 | 使用深度学习的方法替换ORBSLAMv2的特征提取算法,可以TX2上达到实时

论文地址:https://arxiv.org/pdf/1902.11046v3.pdf 代码:https://github.com/jiexiong2016/GCNv2_SLAM 来源:英国皇家理工学院...,被命名于GCNv2。...GCNv2是基于一个为三维射影几何而训练的网络GCN的改进版本。GCNv2被设计用于生成类似于ORB的特征描述子和特征点的算法,其可以很容易的替代ORB特征ORB-SLAMv2。...GCNv2可以显著的提升GCN的计算速度,并且不像GCN只能应用于桌面系统。经过本算法改善的ORB-SLAMv2,可以实时运行在嵌入式设备Jetson TX2。...实验结果表明,经过重新训练后的GCNv2网络精度和GCN基本相当, 并且提取的特征鲁棒性足以应用于无人机的控制。 下面是论文具体框架结构以及实验结果: ? ? ? ? ? ? ? ? ? ?

1.5K30

ROS(indigo)读取手机GPS用于机器人定位~GPS2BTubuntu和window系统下的使用方法~

www.shiyanlou.com/courses/854 邀请码:U23ERF8H 中级教程可参考:https://www.shiyanlou.com/courses/938 邀请码:U9SVZMKH ROS...(indigo)读取手机GPS用于机器人定位~GPS2BTubuntu和window系统下的使用方法~ 不需要额外购买GPS设备。...将手机GPS数据通过蓝牙传输给计算机使用,当然通过类似方法也可以使用手机的三轴陀螺和加速度计。 Android Phone: 安装APK:GPS2BT。 1. ? 2. ? 3. ?...重启,就可以蓝牙配置里启动GPS2BT2了。 3. 用串口调试工具查看GPS数据。 ? ? 4. ROS查看GPS数据。...蓝牙配置启用SPP。 ? 2. 测试GPS,选用google earth。 ? ? 由于连接出错,重新连接,端口更新为COM43(原来为COM42)。 ~END~

1.8K20
领券