先简单介绍一下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部分。 ...
**PHPActiveRecord 开源介绍** PHPActiveRecord 是一个基于 PHP 的 ORM(对象关系映射)框架,它为 PHP 开发者提供了类似于 Ruby on Rails 中 ActiveRecord 模式的功能。这个库的目标是简化数据库操作,使开发者...
- **定义**:ActiveRecord是Yii框架中的一个重要组件,它实现了对象关系映射(ORM)的模式,简化了数据库操作。在这个模式下,每个类通常对应数据库中的一个表,而每个实例则代表表中的一行数据。 - **特点**: - **...
"php_rest"项目就是这样一个使用PHP实现的REST API示例。 在"php_rest-develop"目录中,我们可以期待找到一个包含API核心逻辑、路由定义、数据库交互等组件的开发版本。REST API通常包括以下部分: 1. **路由...
2. 用户登录原理:实现用户身份验证和会话管理。 3. Session入库原理:将Session数据存储在数据库中,增强安全性。 4. 图片验证码:创建防止机器人自动操作的安全措施。 5. 树状货品分类:使用递归或预排序遍历算法...
本文实例讲述了Yii框架实现对...//继承ActiveRecord实现CURD操作 class user extends ActiveRecord { } 后面的代码中命名空间都已经省略 namespace app\controllers; use yii\web\Controller; use app\models\use
3. **ActiveRecord**:Yii 的 ActiveRecord 实现是一种对象关系映射(ORM),它允许开发者通过对象的方式操作数据库记录。每个 ActiveRecord 类对应数据库中的一个表,类的实例则代表表中的行。 4. **组件系统**:...
8. 数据库操作:TPFrame可能包括ORM(对象关系映射)层,简化了数据库查询和操作,例如使用ActiveRecord模式或QueryBuilder。 9. 安全性:一个良好的框架会考虑安全方面,如SQL注入防护、XSS防护、CSRF令牌等。 10...
如果它是源代码文件,那么可能是框架的核心组件或者一个特定功能的实现。如果是一个示例应用,那么开发者可以通过它来学习如何在实际项目中运用小三PHP框架。 在学习和使用小三PHP框架时,理解以下几点至关重要: ...
读取记录则可以通过多种方式实现。例如,按条件查找第一条匹配的记录: ```php $post = Post::model()->find($condition, $params); ``` 或者,通过主键值查找: ```php $post = Post::model()->findByPk($postID...
在PHP开发中,"一个完整的例子"通常指的是涵盖多个核心功能的示例项目。在这个例子中,我们重点讨论的是基于YII框架实现的PHP应用,其中包括了网页分页、数据的增删改查(CRUD)以及自定义类的封装。 1. **PHP分页*...
- **ActiveRecord基础**:介绍数据访问层的实现机制,包括数据模型的定义、CRUD操作等。 - **模板输出**:阐述如何使用模板引擎生成HTML页面。 - **AJAX支持**:演示如何集成AJAX功能,提升用户体验。 - **异常处理*...
2. **ActiveRecord**:CakePHP采用ActiveRecord模式,将数据库表映射为PHP类,简化了数据库操作。每个记录对应一个对象,对象的方法可以直接操作数据库,比如CRUD(创建、读取、更新、删除)操作。 3. **Routing**...
2. **自动路由**:框架提供了强大的URL路由功能,可以根据预定义的规则将URL映射到特定的控制器方法,实现灵活的URL管理和RESTful API设计。 3. **数据库操作**:ThinkPHP的ActiveRecord风格的模型类使得数据库操作...
这个示例应用将展示如何在Yii2中定义这些资源并实现相应的操作。 3. **Yii2的RESTful API支持**:Yii2提供了一个方便的RESTful API组件,可以轻松地将模型映射到API资源。通过配置`config/web.php`中的`urlManager`...
- **IocInterceptor 使用示例**:通过 IocInterceptor 实现 Spring Bean 的注入。 #### 九、Validator 验证器 - **概述**:Validator 提供了数据验证功能,确保数据的正确性和安全性。 - **Validator 配置**:...
《Agile.Web.Application.Development.with.Yii1.1.and.PHP5》这本书是关于敏捷...提供的源代码(Agile.Web.Application.Development.with.Yii1.1.and.PHP5.Code.zip)将帮助读者实战演练书中的示例,加深理解和应用。
Chatify Laravel 包是一个专为 Laravel 框架设计的实时聊天应用解决方案,它使得在 Laravel 项目中集成聊天功能变得简单快捷。...通过学习这个示例,开发者能够快速掌握如何在自己的 Laravel 项目中实现类似功能。
以下知识点详细介绍了PHP支持的数据库类型、原生操作数据库的方法、PDO概念、ActiveRecord以及何时使用DAO(数据访问对象)或ActiveRecord。 PHP支持的数据库接口: PHP语言提供了对多种数据库系统的支持,包括但...