libriciel / php-odata
A lightweight PHP toolbox to parse and handle OData queries
dev-master
2026-10-29 13:23 UTC
Requires
- php: ^8.3
- ext-ctype: *
- guzzlehttp/guzzle: ^7.0
Requires (Dev)
- phpunit/phpunit: ^12.1
- squizlabs/php_codesniffer: ^3.12
Suggests
None
Provides
None
Conflicts
None
Replaces
None
This package is auto-updated.
Last update: 2026-10-29 13:23:55 UTC
README
Analyse des requêtes OData 4.01 ($filter, $select, $orderby, $top, $skip) et génération de la requête SQL paramétrée correspondante (SQLite ou PostgreSQL).
Dépendance de
| Projet | Build | Coverage |
|---|---|---|
| cakephp-odata |
Prérequis
- PHP
^8.3avec l'extensionctype
Installation
composer require libriciel/php-odata:dev-master
Utilisation
Http
Parser: analyse l'URL d'une requête OData (Parser::fromUrl()ou à partir d'une requête PSR-7) ;parse()renvoie le modèle visé (base_model), les champs utilisés dans le filtre (fields) et la requête générée par le driver (sql, avecqueryetparams)Tokenizer: découpe une expression$filteren jetons (champs, opérateurs, valeurs, fonctions…)
tests/TestCase/Http/ParserTest.php
$parser = Parser::fromUrl('https://example.com/odata/Items?$filter=Price eq 100');
$this->assertSame(
'Items',
$parser->parse()['base_model']
);
$this->assertSame(
['Price'],
$parser->parse()['fields']
);
Driver
Sqlite (driver par défaut du Parser) et Postgres implémentent DriverInterface : toSql() construit la requête et ses paramètres à partir des jetons.
tests/TestCase/Driver/SqliteTest.php
$tokens = [
['type' => Tokenizer::T_FIELD, 'value' => 'id'],
['type' => Tokenizer::T_OPERATOR, 'value' => 'eq'],
['type' => Tokenizer::T_NUMBER, 'value' => 42],
];
$result = $this->driver->toSql([
'model' => 'users',
'filter' => $tokens,
]);
$this->assertSame('SELECT * FROM users WHERE id = :param1', $result['query']);
$this->assertSame([':param1' => 42], $result['params']);
Tests
vendor/bin/phpunit