hectororm / query
Hector 查询
Requires
- php: ^8.0
- hectororm/connection: v1.0.0-beta6
Requires (Dev)
- ext-pdo: *
- phpunit/phpunit: ^9.3
This package is auto-updated.
Last update: 2024-09-10 15:26:55 UTC
README
Hector 查询是Hector ORM的查询模块。可以独立于ORM使用。
安装
Composer
您可以使用Composer安装Hector 查询,这是推荐的安装方式。
$ composer require hectororm/query
依赖
- PHP ^8.0
- 包依赖
- hectororm/connection
使用方法
查询构建器
您可以使用Connection
对象初始化查询构建器。
use Hector\Connection\Connection; use Hector\Query\QueryBuilder; $connection = new Connection('...'); $queryBuilder = new QueryBuilder($connection); $result = $queryBuilder ->select('table') ->where('field1', 'foo') ->where('field2', '>=', 2) ->fetchAll();
选择 / 插入 / 更新 / 删除 / 联合
您可以使用特定对象执行选择/插入/更新/删除请求。
- 选择 :
Hector\Query\Select
类 - 插入 :
Hector\Query\Insert
类 - 更新 :
Hector\Query\Update
类 - 删除 :
Hector\Query\Delete
类 - 联合 :
Hector\Query\Union
类
use Hector\Query\Select; use Hector\Query\Insert; use Hector\Query\Update; use Hector\Query\Delete; use Hector\Query\Union; $select = new Select(); $insert = new Insert(); $update = new Update(); $delete = new Delete(); $union = new Union();
所有这些类都实现了StatementInterface
接口。此接口提供了一个获取语句和绑定的方法
StatementInterface::getStatement(BindParamList $bindParams)
使用示例
use Hector\Connection\Connection; use Hector\Connection\Bind\BindParamList; use Hector\Query\Select; $connection = new Connection('...'); $select = new Select(); $select ->from('table') ->where('field', 'value'); $binds = new BindParamList(); $statement = $select->getStatement($binds); $result = $connection->fetchAll($statement, $binds);
条件
Hector 查询
支持有条件和where条件。方法相同,只需在方法名称中将"where"替换为"having"。
Where / Having
/** @var QueryBuilder $queryBuilder */ use Hector\Query\QueryBuilder; $queryBuilder ->from('table', 'alias') ->where('field', '=', 'value') ->orWhere('field', '=', 'value2');
快捷方式
QueryBuilder::whereIn($column, array $values)
QueryBuilder::whereNotIn($column, array $values)
QueryBuilder::whereBetween($column, $value1, $value2)
QueryBuilder::whereNotBetween($column, $value1, $value2)
QueryBuilder::whereGreaterThan($column, $value)
QueryBuilder::whereGreaterThanOrEqual($column, $value)
QueryBuilder::whereLessThan($column, $value)
QueryBuilder::whereLessThanOrEqual($column, $value)
QueryBuilder::whereExists($statement)
QueryBuilder::whereNotExists($statement)
QueryBuilder::whereContains($string)
QueryBuilder::whereStartsWith($string)
QueryBuilder::whereEndsWith($string)
列
您可以使用方法指定列名和别名
QueryBuilder::column($column, $alias)
重复调用此方法,向结果行添加新列;您可以使用方法QueryBuilder::resetColumns()
重置列。
或传递列名数组
QueryBuilder::columns(array $columnNames)
分组
您可以使用方法对结果进行分组
QueryBuilder::groupBy($column)
重复调用此方法,添加新分组;您可以使用方法QueryBuilder::resetGroups()
重置分组。
如果您想为语句设置WITH ROLLUP
修改符,可以使用方法
QueryBuilder::groupByWithRollup(bool $withRollup = true)
排序
您可以使用方法对结果进行排序
QueryBuilder::orderBy($column, $order)
重复调用此方法,添加新排序;您可以使用方法QueryBuilder::resetOrder()
重置排序。
如果想要随机排序,有一个快捷方式可用
QueryBuilder::random()
限制
您可以使用方法限制结果
QueryBuilder::limit(int $limit, int $offset = null)
QueryBuilder::offset(int $offset)
如果您想重置限制,使用方法QueryBuilder::resetLimit()
。
赋值
对于插入/更新语句,您需要使用方法分配值
QueryBuilder::assign($column, $value)
重复调用此方法,向语句添加新赋值;您可以使用方法QueryBuilder::resetAssignments()
重置赋值。
或传递包含列名和值的关联数组
QueryBuilder::assigns(array|StatementInterface $columnValues)
连接
有三种方法可用于执行连接
QueryBuilder::innerJoin($table, $condition, ?string $alias = null)
QueryBuilder::leftJoin($table, $condition, ?string $alias = null)
QueryBuilder::rightJoin($table, $condition, ?string $alias = null)
如果您想重置连接,请使用方法 QueryBuilder::resetJoin()
。
联合
提供了一个 Union
类,用于与选择进行联合。
use Hector\Connection\Connection; use Hector\Query\Select; use Hector\Query\Union; $connection = new Connection('...'); $union = new Union(); /** @var Select $select1 */ /** @var Select $select2 */ $union->addSelect($select1, $select2);
Union
类是 StatementInterface
,因此请参考相关段落以了解如何使用它。
获取结果
有 3 种方法可以获取结果
QueryBuilder::fetchOne(): ?array
获取语句结果的第一行。QueryBuilder::fetchAll(): Generator
获取语句结果的所有行,使用Generator
类。QueryBuilder::fetchColumn(int $column = 0): Generator
获取语句结果所有行的指定列值,使用Generator
类。
要了解如何使用 Generator,请参考 PHP 文档:[https://php.ac.cn/manual/class.generator.php](https://php.ac.cn/manual/class.generator.php)
计数结果
在 QueryBuilder
类中提供了一个快捷方法来计数结果。
/** @var QueryBuilder $queryBuilder */ use Hector\Query\QueryBuilder; $queryBuilder ->from('table', 'alias') ->where('field', '=', 'value') ->orWhere('field', '=', 'value2'); $count = $queryBuilder->count(); $results = $queryBuilder->fetchAll();
此方法会重置查询的列、限制和排序;但不会修改查询构建器,因此您可以使用它继续获取结果,例如。
存在
在 QueryBuilder
类中提供了一个快捷方法来执行存在查询。
/** @var QueryBuilder $queryBuilder */ use Hector\Query\QueryBuilder; $queryBuilder ->from('table', 'alias') ->where('field', '=', 'value') ->orWhere('field', '=', 'value2'); $exists = $queryBuilder->exists();
此方法不会修改查询构建器,因此您可以使用它继续获取结果,例如。
插入 / 更新 / 删除
在 QueryBuilder
类中提供了快捷方法来执行插入、更新或删除操作。
/** @var QueryBuilder $queryBuilder */ use Hector\Query\QueryBuilder; use Hector\Query\Select; $queryBuilder ->from('table', 'alias') ->where('field', '=', 'value') ->orWhere('field', '=', 'value2'); $affectedRows = $queryBuilder->insert(['field' => 'value', 'field2' => 'value2']); $affectedRows = $queryBuilder->insert((new Select())->from('table_src')); $affectedRows = $queryBuilder->update(['field' => 'value']); $affectedRows = $queryBuilder->delete();
这些方法不会修改查询构建器,因此您可以使用它继续获取结果,例如。