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']));
}
}