标签:
最近学了ZF框架,对手册中DB这一节Zend_Db_Table_Row的介绍中说,使用了Zend_Db_Table::find()或::findRow()方法可以返回一个Zend_Db_Table_Row的对象,该对象自动映射到表中的这一行记录,字段和类属性完全关联在一起(字段名是下划线分隔的,属性名由首个单词小写的驼峰式命名,如自动“last_name”,则操作时属性名“lastName”),获取任何字段就直接像操作类属性一样,如:
$row = $table->fetchRow(‘first_name = "Robin"‘);//$table是Zend_Db_Table实例
echo $row->lastName;//假设输出‘Bill’
而修改的操作超级方便,直接对属性赋值后调用save()方法即可,如:
$row->lastName = ‘Gates‘; $row->save();
数据就会自动更新到表中。之后深究了下源码,大致还是逻辑有点多,所以自己理一理,这里贴出一个简单的集成该思路的类,按照数据对象映射的模式来思考的,可以有助于理解。
<?php
/**
* 数据对象映射模式
*
class DataMapping
{
protected $id;
protected $data;
protected $db;
protected $change = false;
function __construct($id)
{
$this->db = Factory::getDatabase();
$res = $this->db->query("select * from user where id = $id limit 1");
$this->data = $res->fetch_assoc();
$this->id = $id;
}
function __get($key) //实现对象操作属性的方式来操作表字段值
{
if (isset($this->data[$key]))
{
return $this->data[$key];
}
}
function __set($key, $value) //对于新的字段可以直接更新进数据表
{
$this->data[$key] = $value;
$this->change = true;
}
function __destruct() //析构器的功能实现save()逻辑
{
if ($this->change)
{
foreach ($this->data as $k => $v)
{
$fields[] = "$k = ‘{$v}‘";
}
$this->db->query("update user set " . implode(‘, ‘, $fields) . " where
id = {$this->id} limit 1");
}
}
}
标签:
原文地址:http://www.cnblogs.com/youjy-mros/p/4631562.html