Search by

libriciel / php-odata

ludeusepommateaupviver

A lightweight PHP toolbox to parse and handle OData queries

dev-master 2026-10-29 13:23 UTC

This package is auto-updated.

Last update: 2026-10-29 13:23:55 UTC


README

License build status coverage report

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

ProjetBuildCoverage
cakephp-odatabuild statuscoverage report

Prérequis

  • PHP ^8.3 avec l'extension ctype

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, avec query et params)
  • Tokenizer : découpe une expression $filter en 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