libriciel / php-odata
A lightweight PHP toolbox to parse and handle OData queries
dev-master
2025-05-07 14:56 UTC
Requires
- php: ^8.3
- guzzlehttp/guzzle: ^7.0
Requires (Dev)
- phpunit/phpunit: ^12.1
- squizlabs/php_codesniffer: ^3.12
This package is not auto-updated.
Last update: 2025-05-13 16:37:18 UTC
README
OData 4.01 parser utility for PHP
Convert OData query strings into structured tokens, and generate SQL queries.
📦 Installation
composer require libriciel/php-odata
🚀 Usage
Integration with HTTP Requests
use Libriciel\OData\Http\Parser;
$url = 'https://example.com' . $_SERVER['REQUEST_URI'];
$parser = Parser::fromUrl($url);
$parsed = $parser->parse();
$pdo = new PDO('sqlite:/path/to/database.sqlite');
$pdo->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
$stmt = $pdo->prepare($parsed['sql']);
$stmt->execute($parsed['params']);
// results
$data = $stmt->fetchAll(PDO::FETCH_ASSOC);
print_r($data);
Direct Usage with Static URL
use Libriciel\OData\Http\Parser;
$parser = Parser::fromUrl('https://example.com/odata/Users?$filter=age gt 18 and active eq true');
$result = $parser->parse();
echo $result['sql'];
// SELECT * FROM users WHERE age > :param1 AND active = :param2
print_r($result['params']);
// [':param1' => 18, ':param2' => true]
print_r($result['fields']);
// ['age', 'active']
print_r($result['base_model']);
// Users
✅ Output
parse()
returns:
[
'base_model' => 'Users', // From the URL path
'fields' => ['age', 'active'], // Fields used in the filter
'sql' => 'SELECT * FROM ...', // Generated SQL (with :paramX)
'params' => [ // Values to bind (PDO-safe)
':param1' => 18,
':param2' => true
]
]
📚 License
AGPL-3.0-only – (c) 2025 Libriciel SCOP