水桶/activerecord

pails-activerecord 是一个基于 ActiveRecord 模式和 php-activerecord 的开源 ORM 库。

v1.3.4 2021-10-24 01:49 UTC

README

@bparks - Brian Parks

基于 PHPActiveRecord,由

http://www.phpactiverecord.org/

这个分支旨在与 PHP ActiveRecord 项目保持 100% 的 API 兼容性,除非在改进性能、API 的一致性或添加 PHP ActiveRecord 中不存在的新功能时有必要。

将采取行动寻找并包含任何有助于实现这些目标的所有和任何 pull 请求。

简介

ActiveRecord 的简要概述

ActiveRecord 是一种访问数据库数据的方法。一个数据库表或视图被封装成一个类,因此一个对象实例与表中的一行相关联。在创建对象后,在保存时会向表中添加新行。任何加载的对象都从数据库中获取其信息;当对象更新时,表中的相应行也会更新。包装类为表或视图中的每一列实现了访问器方法或属性。

更多详细信息请参阅 这里

此实现受 Ruby on Rails 的 ActiveRecord 的启发,因此大量借鉴了它的模式。我们试图保持其约定,主要因为方便或必要性而有所偏离。当然,如果用户熟悉 rails,他们可能会发现一些明显的差异。

最低要求

  • PHP 5.4+
  • 您的数据库对应的 PDO 驱动程序

支持的数据库

  • MySQL
  • SQLite
  • PostgreSQL
  • Oracle

功能

  • 查找方法
  • 动态查找方法
  • 写入方法
  • 关系
  • 验证
  • 回调
  • 序列化(json/xml)
  • 事务
  • 支持多个适配器
  • 一些其他选项,如:别名/受保护的/可访问的属性

安装

设置非常简单直接。本质上只有三个配置点你需要关心

  1. 设置模型自动加载目录。
  2. 配置数据库连接。
  3. 设置用于您环境的数据库连接。

示例

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'

贡献

有关如何向 PHP ActiveRecord 贡献的信息,请参阅 CONTRIBUTING.md