ufpel-csi / cobalto-php-activerecord
cobalto-php-activerecord 是一个基于 ActiveRecord 模式,适用于 mysql 和 postgres 的开源 ORM 库。
Requires
- php: >=7.0,<=7.2.0
Requires (Dev)
- phpunit/phpunit: 4.8.36
This package is auto-updated.
Last update: 2024-09-24 18:16:40 UTC
README
简介
ActiveRecord 的简要概述
活动记录是一种访问数据库数据的方法。将数据库表或视图组织成一个类,因此一个对象实例与表中的一行绑定。创建对象后,保存时将在表中添加新行。任何加载的对象都从数据库获取其信息;当对象更新时,表中的对应行也会更新。包装类为表或视图中的每一列实现了访问或属性方法。
更多详细信息请参见 此处。
此实现受到 Ruby on Rails ActiveRecord 的启发,因此借鉴了许多 Ruby on Rails ActiveRecord 的内容。我们尽量保持其约定,同时在便利性或需求方面进行了一些调整。当然,对于熟悉 Rails 的用户来说,有些差异是显而易见的。
最低要求
- PHP = 7.0.0
- 适用于您的数据库的 PDO 驱动程序,并由 ufpel 开发团队进行定制
支持数据库
- MySQL
- PostgreSQL
功能
- 查找方法
- 动态查找方法
- 写入方法
- 关系
- 验证
- 回调
- 序列化(json/xml)
- 事务
- 支持多个适配器
- 一些其他选项,如:别名/受保护的/可访问的属性
安装
composer require ufpel-csi/cobalto-php-activerecord
配置
配置非常简单直接。您只需关注三个配置点
- 配置模型自动加载目录。
- 配置您的数据库连接。
- 配置您环境中使用的数据库连接。
示例
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' ) ); });
PHP ActiveRecord 将是使用开发数据库的标准。对于测试或生产,只需根据您的当前环境设置标准连接('测试' 或 '生产')
ActiveRecord\Config::initialize(function($cfg) { $cfg->set_default_connection(your_environment); });
设置这三个配置后,您就准备好了。ActiveRecord 会为您处理其余部分。它不需要您将表模式映射到 yaml/xml 文件。它将查询数据库以获取这些信息,并将其存储在缓存中,以避免对单个模式进行多次数据库调用。
测试
composer update vendor/bin/phpunit -c phpunit.xml test/
示例
检索
这些都是您用于查找和检索数据库记录的基本方法。有关详细信息,请参阅 查找器 部分。
$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'
致谢
以下所有代码均基于 php-activerecord 库,最初由:kien la Jacques Fuentes 创建
- @kla - Kien La
- @jpfuentes2 - 杰克·富恩特斯