新人求教:关于Cgridview和Search

碰到的问题:

数据库中某字段的数据是经过函数处理的,比如一个IP字段,记录IP地址,但实际在表中存储的是经过一个函数处理的数据,就是把IP地址转换成INT数值了。

然后在cgridview中,显示但是没有问题,在value中使用反向的INT2IP函数,解出来,显示正常。

但在搜索这块,就不知道怎么处理了。

搜索的input中,输入的肯定是IP地址格式,这个把IP地址转换成INT的函数,应该加到什么地方?

特来求助,谢谢!不知道是否说清楚了。

在model的search方法中 :




 $criteria->compare('ip',  inet_aton($this->ip), true);



inet_aton 函数大致如下:




public static   function inet_aton($ip){


        $a = ip2long($ip);

        $b = unpack("N",pack("L",$a));

        return $b[1];

    }



另外 用criteria构造查询条件 底层本质是拼接sql字符串而已 可以借用CDbExpression对象 来表示mysql函数

mysql中可能存在这个函数 不过php中需要自己实现下

在给你一个链接你自己参考下:DOCUMENTATION Take the Tour Tutorials Class Reference Wiki Screencasts Resources Searching and Sorting by Count of Related Items in CGridView

原理大致类似 如果你用这种方法的话 需要声明一个公共的ipString方法 不过他的值是转换后赋给这个方法的

然后再在‘search’场景中添加这个属性 之后搜索时比较转换后的ip地址

$criteria->compare(‘ip’, ip2int($this->ipString), true);

呵呵 方法可能很多 自己摸索吧

非常感谢!