Yii框架:如何使用CActiveRecord.beforeFind()?

时间:2012-07-05 18:11:47

标签: activerecord yii yii-events

我需要在beforeFind(的子类中使用CActiveRecord

基本上,我需要在执行DB的实际搜索之前转换一些数据。

如何在beforeFind()内更改即将发生的即将发生的操作?混淆$this属性是没有用的,因为它甚至没有填充,这有点意外。 我已经看到文档提到了“隐藏的CDbCriteria参数”,但我无法猜测如何使用它....不幸的是,关于这个主题的文档很少。

我需要做的很简单:我有一个用于存储IP地址的表列。从可伸缩性的角度来看,最有效的设计是为列使用VARBINARY(16)数据类型。例如,参见this SO问题页面(和答案)。 因此,最干净的解决方案是让beforeFind()afterFind()beforeSave()为用户透明地工作。

在代码堆栈中,IP地址将是正常的点分四和数据库级别,它是在使用PHP的inet_pton()方法之后进入该字段的任何内容之后的钩子方法。

应该很酷。它很酷 - 使用afterFind()beforeSave(),我手边有对象的ip_address属性,受我超级操纵权限的支配。

这就是重点和需要:事情是,我不知道如何在beforeFind()上实现这一目标。我不能盲目mergeWith(),因为我需要检查ip_address属性是否是原始条件的一部分,并且我不知道该怎么做。

帮助! TIA:)

1 个答案:

答案 0 :(得分:1)

我在yii论坛上有this nice suggestion。 基本上,我只需要覆盖子类中的findByAttributes(),我就完成了:)