Yii框架:如何使用CActiveRecord.beforeFind()?
我需要在Yii框架:如何使用CActiveRecord.beforeFind()?,activerecord,yii,yii-events,Activerecord,Yii,Yii Events,我需要在CActiveRecord的子类中使用beforeFind() 基本上,在数据库中执行实际搜索之前,我需要转换数据库中的一些数据 如何在beforeFind()中更改即将发生的查找操作?混用$this属性是没有用的,因为它甚至没有填充,这有点令人惊讶。 我看到文档中提到了一个“隐藏的CDbCriteria参数”,但我猜不出该如何使用它。不幸的是,关于这个主题的文档很少 我需要做的很简单:我有一个用于存储IP地址的表列。从可伸缩性的角度来看,最有效的设计是为列使用VARBINARY(16)
CActiveRecord
的子类中使用beforeFind(
)
基本上,在数据库中执行实际搜索之前,我需要转换数据库中的一些数据
如何在beforeFind()中更改即将发生的查找操作?混用$this
属性是没有用的,因为它甚至没有填充,这有点令人惊讶。
我看到文档中提到了一个“隐藏的CDbCriteria参数”,但我猜不出该如何使用它。不幸的是,关于这个主题的文档很少
我需要做的很简单:我有一个用于存储IP地址的表列。从可伸缩性的角度来看,最有效的设计是为列使用VARBINARY(16)数据类型。例如,请参见本页的问题页(和答案)。
因此,最干净的解决方案是让beforeFind()
、afterFind()
和beforeSave()
对用户透明地工作
在代码堆栈中,IP地址将是普通的虚线四元组,在DB级别,它是在那些after/before hook方法中使用PHP的inet\u pton()
方法后进入字段的内容
本来应该很酷的。这很酷,有了afterFind()
和beforeSave()
,我就拥有了手头对象的ip_地址属性,这完全取决于我的uber操作能力
重点和需要是:我不知道如何在beforeFind()
上实现这一点。我无法执行盲mergeWith()
,因为我需要检查ip_地址属性是否是原始条件的一部分,并且我不知道如何执行
救命啊!
TIA:)我在yii论坛上找到了。
基本上,我只需要在子类中重写FindByatAttributes(),就完成了:)