greg-md / php-orm
PHP 强大的 ORM(对象关系映射)。
dev-master
2019-07-24 08:14 UTC
Requires (Dev)
This package is auto-updated.
Last update: 2024-09-24 19:42:23 UTC
README
PHP 的一个轻量但强大的 ORM(对象关系映射)库。
开始使用,建立数据库连接,创建数据库表的 活动记录模型,并使用 查询构建器 编写您的第一个查询。
为什么使用 Greg ORM?
您可以在下一篇文章中了解: 待定
开始使用
要求
- PHP 版本
^7.1
安装
您可以使用 Composer 将此库作为本地、针对项目的依赖项添加到项目中。
composer require greg-md/php-orm
支持的驱动程序
- MySQL
- SQLite
进行中
- MS SQL
- PostgreSQL
- Oracle
数据库连接 - 快速入门
创建数据库连接有两种方式:
- 为特定驱动程序实例化数据库连接;
- 实例化一个连接管理器以存储多个数据库连接。
连接管理器实现了相同的连接策略。这意味着您可以定义一个连接来模拟它。
在下面的示例中,我们将使用连接管理器来存储不同驱动程序的多个连接。
// Instantiate a Connection Manager $manager = new \Greg\Orm\Connection\ConnectionManager(); // Register a MySQL connection $manager->register('mysql_connection', function() { return new \Greg\Orm\Connection\MysqlConnection( new \Greg\Orm\Connection\Pdo('mysql:dbname=example_db;host=127.0.0.1', 'john', 'doe') ); }); // Register a SQLite connection $manager->register('sqlite_connection', function() { return new \Greg\Orm\Connection\SqliteConnection( new \Greg\Orm\Connection\Pdo('sqlite:/var/db/example_db.sqlite') ); }); // Make the manager to act as "mysql_connection" $manager->actAs('mysql_connection');
现在您可以与此管理器一起工作
// Fetch a statement from "sqlite_connection" $manager->connection('sqlite_connection') ->select() ->from('Table') ->fetchAll(); // Fetch a statement from mysql_connection, which is used by default $manager ->select() ->from('Table') ->fetchAll();
完整文档可以在 这里 找到。
活动记录模型 - 快速入门
活动记录模型表示一个表模式,一个实体或该表的实体集合,与查询构建器集成以加快您的编码过程。
假设您有一个 Users
表
CREATE TABLE `Users` ( `Id` INT(10) UNSIGNED NOT NULL AUTO_INCREMENT, `Email` VARCHAR(255) NOT NULL, `Password` VARCHAR(32) NOT NULL, `SSN` VARCHAR(32) NULL, `FirstName` VARCHAR(50) NULL, `LastName` VARCHAR(50) NULL, `Active` TINYINT(1) UNSIGNED NOT NULL DEFAULT '1', PRIMARY KEY (`Id`), UNIQUE (`Email`), UNIQUE (`SSN`), KEY (`Password`), KEY (`FirstName`), KEY (`LastName`), KEY (`Active`) );
让我们为该表创建模型并配置它
class UsersModel extends \Greg\Orm\Model { // Define table alias. (optional) protected $alias = 'u'; // Cast columns. (optional) protected $casts = [ 'Active' => 'boolean', ]; // Table name (required) public function name(): string { return 'Users'; } // Create abstract attribute "FullName". (optional) public function getFullNameAttribute(): string { return implode(' ', array_filter([$this['FirstName'], $this['LastName']])); } // Change "SSN" attribute. (optional) public function getSSNAttribute(): string { // Display only last 3 digits of the SSN. return str_repeat('*', 6) . substr($this['SSN'], -3, 3); } // Extend SQL Builder. (optional) public function whereIsNoFullName() { $this->whereIsNull('FirstName')->whereIsNull('LastName'); return $this; } }
现在,让我们实例化该模型。您需要的只是一次 数据库连接
// Initialize the model. $usersModel = new UsersModel($connection);
与表模式一起工作
// Display table name. print_r($usersModel->name()); // result: Users // Display auto-increment column. print_r($usersModel->autoIncrement()); // result: Id // Display primary keys. print_r($usersModel->primary()); // result: ['Id'] // Display all unique keys. print_r($usersModel->unique()); // result: [['Email'], ['SSN']]
处理单行
// Create a user. $user = $usersModel->create([ 'Email' => 'john@doe.com', 'Password' => password_hash('secret'), 'SSN' => '123456789', 'FirstName' => 'John', 'LastName' => 'Doe', ]); // Display user email. print_r($user['Email']); // result: john@doe.com // Display user full name. print_r($user['FullName']); // result: John Doe print_r($user['SSN']); // result: ******789 // Display if user is active. print_r($user['Active']); // result: true // Display user's primary keys. print_r($user->getPrimary()); // result: ['Id' => 1]
处理行集
// Create some users. $usersModel->create([ 'Email' => 'john@doe.com', 'Password' => password_hash('secret'), 'Active' => true, ]); $usersModel->create([ 'Email' => 'matt@damon.com', 'Password' => password_hash('secret'), 'Active' => false, ]); $usersModel->create([ 'Email' => 'josh@barro.com', 'Password' => password_hash('secret'), 'Active' => false, ]); // Fetch all inactive users from database. $inactiveUsers = $usersModel->whereIsNot('Active')->fetchAll(); // Display users count. print_r($inactiveUsers->count()); // result: 2 // Display users emails. print_r($inactiveUsers->get('Email')); // result: ['matt@damon.com', 'josh@barro.com'] // Activate all users in the row set. $inactiveUsers->set('Active', true)->save(); print_r($inactiveUsers[0]['Active']); // result: true print_r($inactiveUsers[1]['Active']); // result: true
与查询构建器一起工作
选择没有姓名和姓氏的用户。
$users = $usersModel ->whereIsNoFullName() ->orderAsc('Id') ->fetchAll();
更新用户
$usersModel ->where('Id', 10) ->update(['Email' => 'foo@bar.com']);
完整文档可以在 这里 找到。
查询构建器 - 快速入门
查询构建器以优雅的方式在不同复杂级别上创建 SQL 语句和子句。
您可以使用 数据库连接 轻易地实例化一个查询构建器。
假设您有一个 Students
表。
找到住在基什尼奥夫并在 1990 年出生的学生姓名
$students = $connection->select() ->columns('Id', 'Name') ->from('Students') ->where('City', 'Chisinau') ->whereYear('Birthday', 1990) ->fetchAll();
更新学生的成绩
$connection->update() ->table('Students') ->set('Grade', 1400) ->where('Id', 10) ->execute();
删除当年未录取的学生
$connection->delete() ->from('Students') ->whereIsNot('Admitted') ->execute();
添加新学生
$query = $connection->insert() ->into('Students') ->data(['Name' => 'John Doe', 'Year' => 2017]) ->execute();
完整文档可以在 这里 找到。
文档
许可证
麻省理工学院 © 格里戈里·杜卡