{"id":15296413,"url":"https://github.com/hectororm/query","last_synced_at":"2025-09-01T17:33:15.532Z","repository":{"id":62515476,"uuid":"333216602","full_name":"hectororm/query","owner":"hectororm","description":"Hector Query is the query module of Hector ORM. Can be used independently of ORM.","archived":false,"fork":false,"pushed_at":"2025-04-30T08:30:56.000Z","size":95,"stargazers_count":0,"open_issues_count":0,"forks_count":0,"subscribers_count":2,"default_branch":"main","last_synced_at":"2025-04-30T09:46:42.795Z","etag":null,"topics":["orm","pdo","php","php8","query-builder","sql"],"latest_commit_sha":null,"homepage":"https://gethectororm.com","language":"PHP","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mit","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/hectororm.png","metadata":{"files":{"readme":"README.md","changelog":"CHANGELOG.md","contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null}},"created_at":"2021-01-26T21:03:12.000Z","updated_at":"2025-04-30T08:30:07.000Z","dependencies_parsed_at":"2024-07-10T17:17:09.319Z","dependency_job_id":"1c51f7ac-c675-4477-8ffb-601283e65f92","html_url":"https://github.com/hectororm/query","commit_stats":null,"previous_names":[],"tags_count":15,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/hectororm%2Fquery","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/hectororm%2Fquery/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/hectororm%2Fquery/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/hectororm%2Fquery/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/hectororm","download_url":"https://codeload.github.com/hectororm/query/tar.gz/refs/heads/main","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":252818667,"owners_count":21808893,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["orm","pdo","php","php8","query-builder","sql"],"created_at":"2024-09-30T18:10:24.094Z","updated_at":"2025-09-01T17:33:15.519Z","avatar_url":"https://github.com/hectororm.png","language":"PHP","funding_links":[],"categories":[],"sub_categories":[],"readme":"# Hector Query\n\n[![Latest Version](https://img.shields.io/packagist/v/hectororm/query.svg?style=flat-square)](https://github.com/hectororm/query/releases)\n![Packagist Dependency Version](https://img.shields.io/packagist/dependency-v/hectororm/query/php?version=dev-main\u0026style=flat-square)\n[![Software license](https://img.shields.io/github/license/hectororm/query.svg?style=flat-square)](https://github.com/hectororm/query/blob/main/LICENSE)\n\n\u003e **Note**\n\u003e\n\u003e This repository is a **read-only split** from the [main HectorORM repository](https://github.com/hectororm/hectororm).\n\u003e\n\u003e For contributions, issues, or more information, please visit\n\u003e the [main HectorORM repository](https://github.com/hectororm/hectororm).\n\u003e\n\u003e **Do not open issues or pull requests here.**\n\n---\n\n**Hector Query** is the query module of Hector ORM. Can be used independently of ORM.\n\n## Installation\n\nYou can install **Hector Query** with [Composer](https://getcomposer.org/), it's the recommended installation.\n\n```shell\n$ composer require hectororm/query\n```\n\n## Usage\n\n### QueryBuilder\n\nYou can initialize the query builder with a `Connection` object.\n\n```php\nuse Hector\\Connection\\Connection;\nuse Hector\\Query\\QueryBuilder;\n\n$connection = new Connection('...');\n$queryBuilder = new QueryBuilder($connection);\n\n$result = $queryBuilder\n    -\u003eselect('table')\n    -\u003ewhere('field1', 'foo')\n    -\u003ewhere('field2', '\u003e=', 2)\n    -\u003efetchAll();\n```\n\n### Select / Insert / Update / Delete / Union\n\nYou can do a select/insert/update/delete request with specific objects:\n\n- Select : `Hector\\Query\\Select` class\n- Insert : `Hector\\Query\\Insert` class\n- Update : `Hector\\Query\\Update` class\n- Delete : `Hector\\Query\\Delete` class\n- Union : `Hector\\Query\\Union` class\n\n```php\nuse Hector\\Query\\Select;\nuse Hector\\Query\\Insert;\nuse Hector\\Query\\Update;\nuse Hector\\Query\\Delete;\nuse Hector\\Query\\Union;\n\n$select = new Select();\n$insert = new Insert();\n$update = new Update();\n$delete = new Delete();\n$union = new Union();\n```\n\nAll this classes implements `StatementInterface` interface. This interface provides one method to get statement and bindings:\n\n`StatementInterface::getStatement(BindParamList $bindParams)`\n\nExample of use:\n\n```php\nuse Hector\\Connection\\Connection;\nuse Hector\\Connection\\Bind\\BindParamList;\nuse Hector\\Query\\Select;\n\n$connection = new Connection('...');\n$select = new Select();\n$select\n    -\u003efrom('table')\n    -\u003ewhere('field', 'value');\n\n$binds = new BindParamList();\n$statement = $select-\u003egetStatement($binds);\n\n$result = $connection-\u003efetchAll($statement, $binds);\n```\n\n### Conditions\n\n`Hector Query` has support of having and where conditions. Methods are sames, just replace \"where\" by \"having\" in method\nname.\n\n#### Where / Having\n\n```php\n/** @var QueryBuilder $queryBuilder */\nuse Hector\\Query\\QueryBuilder;\n\n$queryBuilder\n    -\u003efrom('table', 'alias')\n    -\u003ewhere('field', '=', 'value')\n    -\u003eorWhere('field', '=', 'value2');\n```\n\n#### Shortcuts\n\n- `QueryBuilder::whereIn($column, array $values)`\n- `QueryBuilder::whereNotIn($column, array $values)`\n- `QueryBuilder::whereBetween($column, $value1, $value2)`\n- `QueryBuilder::whereNotBetween($column, $value1, $value2)`\n- `QueryBuilder::whereGreaterThan($column, $value)`\n- `QueryBuilder::whereGreaterThanOrEqual($column, $value)`\n- `QueryBuilder::whereLessThan($column, $value)`\n- `QueryBuilder::whereLessThanOrEqual($column, $value)`\n- `QueryBuilder::whereExists($statement)`\n- `QueryBuilder::whereNotExists($statement)`\n- `QueryBuilder::whereContains($string)`\n- `QueryBuilder::whereStartsWith($string)`\n- `QueryBuilder::whereEndsWith($string)`\n\n### Columns\n\nYou can specify columns name and alias with method:\n\n`QueryBuilder::column($column, $alias)`\n\nRepeat call of this method, add a new column to the result rows ; you can reset columns with method `QueryBuilder::resetColumns()`.\n\nOr pass an array of column names:\n\n`QueryBuilder::columns(array $columnNames)`\n\n### Group\n\nYou can group results with method:\n\n`QueryBuilder::groupBy($column)`\n\nRepeat call of this method, add a new group ; you can reset groups with method `QueryBuilder::resetGroups()`.\n\nIf you want set `WITH ROLLUP` modifier to your statement, you can do it with method:\n\n`QueryBuilder::groupByWithRollup(bool $withRollup = true)`\n\n### Order\n\nYou can order results with method:\n\n`QueryBuilder::orderBy($column, $order)`\n\nRepeat call of this method, add a new order ; you can reset orders with method `QueryBuilder::resetOrder()`.\n\nA shortcut is available if you want to do a random order:\n\n`QueryBuilder::random()`\n\n### Limit\n\nYou can limit results with methods:\n\n- `QueryBuilder::limit(int $limit, int $offset = null)`\n- `QueryBuilder::offset(int $offset)`\n\nIf you want reset limits, uses method `QueryBuilder::resetLimit()`.\n\n### Assignments\n\nFor Insert/Update statements, you need to assign values with method :\n\n`QueryBuilder::assign($column, $value)`\n\nRepeat call of this method, add a new assignment to the statement ; you can reset assignments with method `QueryBuilder::resetAssignments()`.\n\nOr pass an associative array with column names and values:\n\n`QueryBuilder::assigns(array|StatementInterface $columnValues)`\n\n### Jointures\n\nThree methods are available to do jointures:\n\n- `QueryBuilder::innerJoin($table, $condition, ?string $alias = null)`\n- `QueryBuilder::leftJoin($table, $condition, ?string $alias = null)`\n- `QueryBuilder::rightJoin($table, $condition, ?string $alias = null)`\n\nIf you want reset jointures, uses method `QueryBuilder::resetJoin()`.\n\n### Union\n\nAn `Union` class is available to make unions with select.\n\n```php\nuse Hector\\Connection\\Connection;\nuse Hector\\Query\\Select;\nuse Hector\\Query\\Union;\n\n$connection = new Connection('...');\n$union = new Union();\n\n/** @var Select $select1 */\n/** @var Select $select2 */\n$union-\u003eaddSelect($select1, $select2);\n```\n\n`Union` class is a `StatementInterface`, so refers to the related paragraph to use it.\n\n### Fetch results\n\n3 methods to fetch result:\n\n- `QueryBuilder::fetchOne(): ?array`\n  Get first row of statement results.\n- `QueryBuilder::fetchAll(): Generator`\n  Get all rows of statement results, uses `Generator` class.\n- `QueryBuilder::fetchColumn(int $column = 0): Generator`\n  Get specified column value of all rows of statement results, uses `Generator` class.\n  \nTo known how use Generator, refers to the PHP documentation: https://www.php.net/manual/class.generator.php\n\n### Count results\n\nA shortcut method is available in `QueryBuilder` class to count results.\n\n```php\n/** @var QueryBuilder $queryBuilder */\nuse Hector\\Query\\QueryBuilder;\n\n$queryBuilder\n    -\u003efrom('table', 'alias')\n    -\u003ewhere('field', '=', 'value')\n    -\u003eorWhere('field', '=', 'value2');\n\n$count = $queryBuilder-\u003ecount();\n$results = $queryBuilder-\u003efetchAll();\n```\n\nThis method reset columns, limit and order of query ; but don't modify the query builder, so you can continue to use it to get results for example.\n\n### Exists\n\nA shortcut method is available in `QueryBuilder` class to do an exists query.\n\n```php\n/** @var QueryBuilder $queryBuilder */\nuse Hector\\Query\\QueryBuilder;\n\n$queryBuilder\n    -\u003efrom('table', 'alias')\n    -\u003ewhere('field', '=', 'value')\n    -\u003eorWhere('field', '=', 'value2');\n\n$exists = $queryBuilder-\u003eexists();\n```\n\nThis method don't modify the query builder, so you can continue to use it to get results for example.\n\n### Insert / Update / Delete\n\nShortcut methods are available in `QueryBuilder` class to do an insert, an update or a delete.\n\n```php\n/** @var QueryBuilder $queryBuilder */\nuse Hector\\Query\\QueryBuilder;\nuse Hector\\Query\\Select;\n\n$queryBuilder\n    -\u003efrom('table', 'alias')\n    -\u003ewhere('field', '=', 'value')\n    -\u003eorWhere('field', '=', 'value2');\n\n$affectedRows = $queryBuilder-\u003einsert(['field' =\u003e 'value', 'field2' =\u003e 'value2']);\n$affectedRows = $queryBuilder-\u003einsert((new Select())-\u003efrom('table_src'));\n$affectedRows = $queryBuilder-\u003eupdate(['field' =\u003e 'value']);\n$affectedRows = $queryBuilder-\u003edelete();\n```\n\nThese methods don't modify the query builder, so you can continue to use it to get results for example.\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fhectororm%2Fquery","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fhectororm%2Fquery","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fhectororm%2Fquery/lists"}