先简单介绍一下Active Record:
Active Record(中文名:活动记录)是一种领域模型模式,特点是一个模型类对应关系型数据库中的一个表,而模型类的一个实例对应表中的一行记录。Active Record 和 Row Gateway (行记录入口)十分相似,但前者是领域模型,后者是一种数据源模式。关系型数据库往往通过外键来表述实体关系,Active Record 在数据源层面上也将这种关系映射为对象的关联和聚集。
Active Record 适合非常简单的领域需求,尤其在领域模型和数据库模型十分相似的情况下。如果遇到更加复杂的领域模型结构(例如用到继承、策略的领域模型),往往需要使用分离数据源的领域模型,结合 Data Mapper (数据映射器)使用。
Active Record 驱动框架一般兼有 ORM 框架的功能,但 Active Record 不是简单的 ORM,正如和 Row Gateway 的区别。著名的例子是全栈(Full Stack) Web 开发框架 Ruby on Rails ,其默认使用一个纯 Ruby 写成的 Active Record 框架来驱动 MVC 中的模型层。
在 Martin Fowler 的 《企业应用架构模式》 一书中曾详细叙述了本模式。
以下是著名的 Active Record 驱动框架:
SQLObject(Python)
Ruby on Rails ActiveRecord (Ruby)
Yii Framework ActiveRecord (PHP)
Castle ActiveRecord (.NET)
<?php define('DBHOST', 'localhost'); define('DBUSER', 'root'); define('DBPASS', ''); define('DBNAME', 'test'); define('TABLE_PREFIX', 't_'); class ActiveRecord { private $tablepre; private $class; private $table; private static $link; private $data; public $primaryKey = 'id'; public function __construct() { $this->tablepre = TABLE_PREFIX; $this->class = get_class($this); $this->table = $this->tablepre . strtolower($this->class); $this->data = array(); $this->connect(); } private function connect() { if(!self::$link) { self::$link = mysql_connect(DBHOST, DBUSER, DBPASS); mysql_select_db(DBNAME); } return self::$link; } public function __set($name, $value) { $this->data[$name] = $value; } private function implodefields($cond) { $fields = array(); foreach($cond as $key => $value) { $value = mysql_real_escape_string($value); $fields[] = "`$key`='$value'"; } return implode(', ', $fields); } public function add() { $fields = $this->implodefields($this->data); $sql = "INSERT INTO `{$this->table}` SET $fields"; $this->query($sql); } public function findById($id) { $sql = "SELECT * FROM `{$this->table}` WHERE `{$this->primaryKey}`='$id' LIMIT 1"; $data = $this->getOne($sql); return $this->makeObjFromArray($data); } private function makeObjFromArray($data) { $obj = new $this->class; foreach($data as $key => $value) { $obj->$key = $value; } return $obj; } private function query($sql) { echo $sql . "\n"; return mysql_query($sql, self::$link); } private function getOne($sql) { $data = $this->query($sql); if($data) { $item = mysql_fetch_assoc($data); return $item; } return false; } } class User extends ActiveRecord { var $primaryKey = 'id'; } $user = new User(); $user->name = '热电影'; $user->email = 'www.redianying.com'; $user->add(); $user = $user->findById(1); print_r($user);
相关推荐
$ php composer.phar require jlorente/yii2-activerecord-inheritance " * " 或添加 ... " require " : { ... " jlorente/yii2-activerecord-inheritance " : " * " } 到composer.json文件的require部分。 ...
本文实例讲述了Yii框架实现对...//继承ActiveRecord实现CURD操作 class user extends ActiveRecord { } 后面的代码中命名空间都已经省略 namespace app\controllers; use yii\web\Controller; use app\models\use
它的佳应用是模型化数据表为 PHP 结构和执行不包含复杂 SQL 语句的查询。 对于复杂查询的场景,应使用 Yii DAO 建立数据库连接 默认情况下, 它假定 db 应用组件提供了所需的 CDbConnection 数据库连接实例...
Eloquent-Laravel附带的ORM提供了一个漂亮,简单的ActiveRecord实现,用于处理您的数据库 安装 Dillinger需要才能运行。 安装依赖项和devDependencies并启动服务器。 $ cd project $ php composer.phar install $...
借鉴了国外很多优秀的框架和模式,使用面向对象的开发结构和MVC模式,融合了Struts的Action思想和JSP的TagLib(标签库)、RoR的ORM映射和ActiveRecord模式,封装了CURD和一些常用操作,单一入口模式等,在模版引擎、...
后来经过不断改进和完善,同时也借鉴了国外很多优秀的框架和模式,使用面向对象的开发结构和MVC模式,融合了Struts的Action和Dao思想和JSP的TagLib(标签库)、RoR的ORM映射和ActiveRecord模式,封装了CURD和一些...
JFinal 是基于 Java 语言的极速 WEB + ORM 框架,其核心设计目标是开发迅速、代码量少、学习简单、功能强大、轻量级、易扩展、Restful。在拥有Java语言所有优势的同时再拥有ruby、...以下是JFinal实现Blog管理的示例:
本文实例讲述了YII2框架中...use yii\db\ActiveRecord; class MyUser extends ActiveRecord { public static function tableName() { return '{{%user}}'; } } 然后创建分页的控制器: <?php namespace app\
本文实例讲述了YII2框架中ActiveDataProvider与GridView的配合使用操作。分享给大家供大家参考,具体如下: YII2中ActiveDataProvider可以使用yii\db\Query或yii\db\Active...use yii\db\ActiveRecord; use yii\data\
有关使用示例,请参见使用此扩展的示例应用程序。 本指南假定您熟悉爱沙尼亚银行付款的实现(请参阅 ) 主要特点: 可扩展的代码,几乎所有内容都可以定制 与ActiveRecord对象(订单,产品)集成 购物篮功能...
Illuminate Database 组件是一个完整的 PHP 数据库工具包,提供了一个富有表现力的查询构建器、ActiveRecord 风格的 ORM 和模式构建器。 特征 查询生成器 / 模式生成器 / Eloquent ORM 插入/更新/删除 软删除 日期...
yii2-restmodel 将此仓库克隆到您的扩展名/文件夹中。 查看示例(您应将其复制到模型/文件夹中)