format_row(行数据格式化)

format_row (行数据格式化)的使用场景?

我们经常会在数据库中,使用 PHP 的 serialize 或者 json_encode 去将数组或者结构体存在某个字段中,

然而每次拿出来,我们都需要对其进行格式化(unserialize 或 json_decode),

而且,如果每次取回来的行数据数量多的话,我们还需要额外进行一次循环,效率低不说,代码也会很罗嗦。

format_row 通过回调的方式,在 DB 查询时对数据进行修改,减少了一次额外的行数据格式化数据,

而且只需要继承 base_model 一个方法,非常高效而且有用。

format_row 使用例子

假设还是 user 表:

CREATE TABLE `user` (
  `id` MEDIUMINT(8) UNSIGNED NOT NULL AUTO_INCREMENT COMMENT '',
  `data` text NOT NULL COMMENT '用户的扩展数据',
  PRIMARY KEY (`uid`)
) DEFAULT CHARSET=utf8 COMMENT='user'
<?php
!defined('FRAMEWORK_PATH') && exit('Accesss Deined');
class user extends base_model {
    function __construct() {
        parent::__construct('user', 'id');
    }


    /**
     * format row
     * @param $row
     */
    function format_row(&$row) {
        // check data field exists 
        if (isset($row['data'])) {
            $row['data'] = json_decode($row['data'], 1);
        }
    }

}
?>

使用方法:

class index_control extends base_control{
     function on_index(){
          // insert user data
          $data = array(
               'id' => 1,
               'data' => json_encode(array('ip' => '127.0.0.1'),320),
          );
          $this->user->insert($data,1);
          // get user 
          $user = $this->user->get(1);
          // output user data
          log::info('user='.$user['id'], 'data='.var_dump($user['data']));
     }
}

results matching ""

    No results matching ""