speedy-php / active-record
SpeedyPHP中使用ActiveRecord包
此包的官方仓库似乎已不存在,因此包已被冻结。
This package is not auto-updated.
Last update: 2024-01-20 11:12:02 UTC
README
版本 1.0
由Kien La和Jacques Fuentes编写
http://www.phpactiverecord.org/
简介
ActiveRecord的简要概述
Active record是一种访问数据库数据的方法。数据库表或视图被封装成一个类,因此一个对象实例与表中的一行绑定。对象创建后,在保存时会在表中添加新行。任何加载的对象都从数据库中获取其信息;当对象更新时,表中的对应行也会更新。包装类为表或视图中的每一列实现了访问器方法或属性。
更多详细信息请参阅此处。
此实现受到了Ruby on Rails的ActiveRecord的启发,并从中大量借鉴。我们尽量保持其约定,但在方便或必要时有所偏离。当然,如果用户熟悉Rails,他们可能会发现一些明显的差异。
最低要求
- PHP 5.3+
- 您相应数据库的PDO驱动程序
支持的数据库
- MySQL
- SQLite
- PostgreSQL
- Oracle
功能
- 查找方法
- 动态查找方法
- 写入方法
- 关系
- 验证
- 回调
- 序列化(json/xml)
- 事务
- 支持多个适配器
- 一些杂项选项,如:别名/受保护的/可访问的属性
安装
设置非常简单直接。实际上,您只需要关注三个配置点
- 设置模型自动加载目录。
- 配置您的数据库连接。
- 设置用于您环境的数据库连接。
示例
ActiveRecord\Config::initialize(function($cfg)
{
$cfg->set_model_directory('/path/to/your/model_directory');
$cfg->set_connections(
array(
'development' => 'mysql://username:password@localhost/development_database_name',
'test' => 'mysql://username:password@localhost/test_database_name',
'production' => 'mysql://username:password@localhost/production_database_name'
)
);
});
或者(不使用5.3闭包)
$cfg = ActiveRecord\Config::instance();
$cfg->set_model_directory('/path/to/your/model_directory');
$cfg->set_connections(
array(
'development' => 'mysql://username:password@localhost/development_database_name',
'test' => 'mysql://username:password@localhost/test_database_name',
'production' => 'mysql://username:password@localhost/production_database_name'
)
);
PHP ActiveRecord默认使用您的开发数据库。对于测试或生产,您只需根据当前环境('测试'或'生产')设置默认连接
ActiveRecord\Config::initialize(function($cfg)
{
$cfg->set_default_connection(your_environment);
});
一旦您配置了这三个设置,您就完成了。ActiveRecord会为您处理其余的。它不需要您将表模式映射到yaml/xml文件中。它将查询数据库以获取此信息,并将其缓存,以便不会对单个模式进行多次数据库调用。
基本的CRUD
检索
这些是您查找和从数据库检索记录的基本方法。有关详细信息,请参阅查找器部分。
$post = Post::find(1);
echo $post->title; # 'My first blog post!!'
echo $post->author_id; # 5
# also the same since it is the first record in the db
$post = Post::first();
# finding using dynamic finders
$post = Post::find_by_name('The Decider');
$post = Post::find_by_name_and_id('The Bridge Builder',100);
$post = Post::find_by_name_or_id('The Bridge Builder',100);
# finding using a conditions array
$posts = Post::find('all',array('conditions' => array('name=? or id > ?','The Bridge Builder',100)));
创建
在这里,我们通过实例化一个新对象并调用save()方法来创建一个新的帖子。
$post = new Post();
$post->title = 'My first blog post!!';
$post->author_id = 5;
$post->save();
# INSERT INTO `posts` (title,author_id) VALUES('My first blog post!!', 5)
更新
要更新,您首先需要找到一条记录,然后更改其属性之一。它会保留一个属性数组,这些属性是“脏的”(已被修改),因此我们的SQL语句将只更新修改过的字段。
$post = Post::find(1);
echo $post->title; # 'My first blog post!!'
$post->title = 'Some real title';
$post->save();
# UPDATE `posts` SET title='Some real title' WHERE id=1
$post->title = 'New real title';
$post->author_id = 1;
$post->save();
# UPDATE `posts` SET title='New real title', author_id=1 WHERE id=1
删除
删除记录不会销毁对象。这意味着它会调用SQL删除您的数据库中的记录,但如果需要,您仍然可以使用该对象。
$post = Post::find(1);
$post->delete();
# DELETE FROM `posts` WHERE id=1
echo $post->title; # 'New real title'