<?php require __DIR__ . '/../vendor/autoload.php'; use Magento\Component\QueryLanguage\Expression\Transformer\Configuration; use Magento\Component\QueryLanguage\Expression\Transformer\SQLTransformerBuilder; use Magento\Component\QueryLanguage\Expression\Where; // Build or hydrate query $query = Where::all([Where::field('name')->contains('Snow'), Where::field('age')->between(25, 30)]); // Initiate database connection $pdo = new \PDO('sqlite::memory:'); // Load sample data array_map([$pdo, 'exec'], ['CREATE TABLE people (id INT, name VARCHAR(10), age INT);', 'INSERT INTO people VALUES(1, "John Snow", 30);', 'INSERT INTO people VALUES(2, "Ramsay Snow", 31);']); // Create transformer $transformer = SQLTransformerBuilder::make()->build(); // Transform query into SQL clause $clause = $transformer->transform($query, Configuration::make()); // Execute query $stmt = $pdo->prepare('SELECT * FROM people WHERE ' . $clause->getWhere()); $stmt->execute($clause->getParameters()); // Fetch results $people = $stmt->fetchAll(PDO::FETCH_ASSOC); var_dump($people);
public function testNestedExpression() { $sql = $this->transformer->transform(Where::any([Where::field('first_name')->equals('John'), Where::all([Where::field('last_name')->equals('Smith'), Where::field('age')->between(20, 40)]), Where::field('last_name')->contains('Jorge')]), $this->config); $this->assertEquals('(phpunit.first_name = ? OR (phpunit.last_name = ? AND (phpunit.age >= ? AND phpunit.age <= ?)) OR phpunit.last_name LIKE ?)', $sql->getWhere()); $this->assertEquals(['John', 'Smith', 20, 40, '%Jorge%'], $sql->getParameters()); }
public function testAllMatch() { $filter = $this->transformer->transform(Where::all([Where::field('name')->equals('Jane'), Where::field('age')->equals(21)]), $this->config); $result = array_filter($this->data, $filter); $this->assertEquals(['jane'], array_keys($result)); }
public function testAllMatch() { $result = $this->find(Where::all([Where::field('name')->equals('Jane'), Where::field('age')->equals(21)])); $this->assertEquals(['jane'], $result); }