erodriguezds / active-orm
PHP库的另一个轻量级ActiveRecord ORM,负责构建SQL查询字符串、分页和通过面向对象的PHP接口进行对象化。
v1.0.1
2019-05-21 23:54 UTC
Requires
- php: >=7.2.0
- ext-ds: *
Requires (Dev)
- friendsofphp/php-cs-fixer: ^2.13
- php-coveralls/php-coveralls: ^2.1
- phpunit/phpunit: ^7.4
- squizlabs/php_codesniffer: ^3.3
This package is not auto-updated.
Last update: 2024-09-20 00:26:08 UTC
README
PHP查询构建器和基于ActiveRecord的ORM,深受Yii2 ORM和Eloquent(Laravel ORM)的启发,但更紧凑、更轻量级!
功能
- 强大的直观查询构建器("查询":整个ORM的核心类),语法流畅、美观,您已经从Eloquent或Yii2 ORM中熟悉
选择查询
$results = (new Query($myPdo)) ->select('*') // not necesary ->from('users') ->where([ 'name' => $submitedName, // translates to "name = ? ", where '?' will be replaced by the SQL-escaped value of $submittedPage [ 'age', '>', $submitedAge ], // 3-elements array syntax for 'field', 'operator' and 'value'. The 3rd element will be prepared by PDO "age < $submitedAge", //more confortable, but this way, you won't have a PDO prepared parameter 'id' => [2, 3, 6], // translates to "id IN(2, 3, 6)" ], 'OR') // OR's all the previously defined condition. Default is 'AND' ->fetchAll(); // you could also "fetchOne()" foreach($result as $row){ // ... }
入门
创建一个新的PDO实例,并将其传递给Query
use ActiveORM\Query; .... $pdo = new \PDO('mysql:dbname=goldoni;host=localhost;charset=utf8', 'root', 'root'); $query = (new Query($pdo))
或者,全局设置PDO,以便每个新的Query实例都使用它
use ActiveORM\Query; .... $pdo = new \PDO('mysql:dbname=goldoni;host=localhost;charset=utf8', 'root', 'root'); Query::setPdo($pdo); .... $query = (new Query()) //will get the PDO instance from the global set ->select('*') ->from('users') ->where(...)
先决条件
您需要安装哪些软件以及如何安装它们
"require": {
"php": ">=7.2.0"
}
安装
composer require erodriguezds/active-orm
示例
选择
$query = (new Query())->from('users')->select('first_name');
构建以下查询
SELECT first_name FROM users
插入
$query = (new Query($this->pdo)) ->insert( 'users', [ 'first_name' => ':first_name', 'last_name' => ':last_name', 'email' => ':email', 'mobile' => ':mobile', 'phone' => ':phone', ] ); $query1 = (new Query($this->pdo)) ->insert('users') ->value([ 'first_name' => ':first_name', 'last_name' => ':last_name', 'email' => ':email', 'phone' => ':phone' ]);
构建以下查询
INSERT INTO users (first_name, last_name, email, mobile, phone) VALUES (:first_name, :last_name, :email, :mobile, :phone)
使用 ->execute() 插入
$data = [ 'id' => 12, 'first_name' => 'Joe3', 'last_name' => 'Doe3', 'email' => 'joe@contact.de', 'phone' => '+0172222222' ]; $query = (new Query($this->pdo)) ->insert( 'users', [ 'id' => ':id', 'first_name' => ':first_name', 'last_name' => ':last_name', 'email' => ':email', 'phone' => ':phone' ] )->params($data) ->execute();
更新
$data = [ 'first_name' => 'Joe3', 'last_name' => 'Doe3', 'email' => 'joe@contact.de' ]; $query = (new Query($this->pdo)) ->update( 'users', [ 'first_name' => ':first_name', 'last_name' => ':last_name', 'email' => ':email' ], 2 ) ->params($data); $query1 = (new Query($this->pdo)) ->update('users') ->set([ 'first_name' => ':first_name', 'last_name' => ':last_name', 'email' => ':email' ]) ->where('id = :id') ->params($data);
构建以下查询
UPDATE users SET first_name = :first_name, last_name = :last_name, email = :email WHERE (id = :id)
使用 ->execute() 更新
$data = [ 'first_name' => 'Joe', 'last_name' => 'Doe', 'email' => 'joe@contact.de', 'phone' => '+0172222222' ]; $query = (new Query($this->pdo)) ->update( 'users', [ 'first_name' => ':first_name', 'last_name' => ':last_name', 'email' => ':email', 'phone' => ':phone' ], 4 ) ->params($data) ->execute();
删除
$query = (new Query($this->pdo))->delete('users', 2); $query1 = (new Query($this->pdo))->delete('users')->where('id = :id')->params(['id' => 12]);
构建以下查询
DELETE FROM users WHERE (id = :id)
使用 ->execute() 删除
(new Query($this->pdo))->delete('users', 2)->execute();
where
$query = (new Query()) ->from('users', 'u') ->where('first_name = :first_name OR email = :email', 'phone = :phone'); $query2 = (new Query()) ->from('users', 'u') ->where('first_name = :first_name OR email = :email') ->where('mobile = :mobile');
构建以下查询
SELECT * FROM users as u WHERE (first_name = :first_name OR email = :email) AND (phone = :phone)
SELECT * FROM users as u WHERE (first_name = :first_name OR email = :email) AND (mobile = :mobile)
参数
$user = (new Query($this->pdo)) ->from('users', 'u') ->where('id = :id') ->params(['id' => 1]);
count
$usersCount = (new Query($this->pdo)) ->from('users', 'u') ->where('u.id < :number') ->params([ 'number' => 5 ]) ->count();
orderBy
$query = (new Query($this->pdo)) ->from('users', 'u') ->orderBy('u.id', 'DESC');
构建以下查询
SELECT * FROM users as u ORDER BY u.id DESC
groupBy
$query = (new Query()) ->select('u.first_name', 'COUNT(id)') ->from('users', 'u') ->groupBy('u.updated_at');
构建以下查询
SELECT u.first_name, COUNT(id) FROM users as u GROUP BY u.updated_at
joins
$query = (new Query()) ->from('users', 'u') ->select('first_name') ->join('posts as p', 'u.id = p.user_id'); $query = (new Query()) ->from('users', 'u') ->select('first_name') ->join('posts as p2', 'u.id = p2.user_id', 'inner');
构建以下查询
SELECT first_name FROM users as u LEFT JOIN posts as p ON u.id = p.user_id
SELECT first_name FROM users as u INNER JOIN posts as p2 ON u.id = p2.user_id
limit
$query = (new Query($this->pdo)) ->from('users', 'u') ->where('first_name = :first_name OR email = :email') ->limit(5);
构建以下查询
SELECT * FROM users as u WHERE (first_name = :first_name OR email = :email) LIMIT 0, 5
fetchAll
$query = (new Query($this->pdo))->from('users')->select('first_name')->fetchAll();
fetch
$user = (new Query($this->pdo)) ->from('users', 'u') ->where('id = :id') ->params(['id' => 1]) ->fetch();
fetchOrFail
$user = (new Query($this->pdo)) ->from('users', 'u') ->where('id = :id') ->params(['id' => 100]) ->fetchOrFail();
execute
$query = (new Query($this->pdo)) ->insert( 'users', [ 'first_name' => ':first_name', 'last_name' => ':last_name', 'email' => ':email', 'mobile' => ':mobile', 'phone' => ':phone', ] ) ->execute();
paginate
$paginate = (new Query($this->pdo)) ->from('users', 'u') ->into(Demo::class) ->paginate(5, 1); $paginate->getNbPages(); $paginate->haveToPaginate(); $paginate->hasPreviousPage(); $paginate->getPreviousPage(); $paginate->hasNextPage(); $paginate->getNextPage(); $paginate->getCurrentPageOffsetStart(); $paginate->getCurrentPageOffsetEnd(); $paginate->getIterator(); // return collections of objects
对象化
use Goldoni\Builder\Entities\Demo; ... $demos = (new Query($this->pdo)) ->from('users', 'u') ->into(Demo::class) ->fetchAll(); $demo1 = $demos[0]; // get_class($demo1) === Demo::class echo $demo1->firstName; $demo2 = (new Query($this->pdo)) ->from('users', 'u') ->where('id = :id') ->into(Demo::class) ->params(['id' => 2]) ->fetch(); // get_class($demo2) === Demo::class echo $demo2->firstName;
var_dump($demo1 instanceof Demo::class); // TRUE
var_dump($demo2 instanceof Demo::class); // TRUE
单元测试
./vendor/bin/phpunit
版本控制
我们使用1.3.0
作者
- Goldoni Fouotsa - 初始工作
许可证
本项目采用MIT许可证