for testing and deploying your application
for finding and fixing issues
for empowering human code reviews
<?php
namespace Saxulum\ElasticSearchQueryBuilder;
use Saxulum\ElasticSearchQueryBuilder\Node\AbstractNode;
use Saxulum\ElasticSearchQueryBuilder\Node\ArrayNode;
use Saxulum\ElasticSearchQueryBuilder\Node\CallbackNode;
use Saxulum\ElasticSearchQueryBuilder\Node\ObjectNode;
use Saxulum\ElasticSearchQueryBuilder\Node\ScalarNode;
class QueryBuilder
{
/**
* @var AbstractNode
*/
protected $node;
public function __construct()
$this->node = new ObjectNode();
}
* @return Expr
public function a()
return new Expr(new ArrayNode());
* @param \Closure $callback
*
public function c(\Closure $callback)
return new Expr(new CallbackNode($callback));
public function o()
return new Expr(new ObjectNode());
public function s($value = null)
return new Expr(new ScalarNode($value));
* @param Expr $expr
* @return $this
public function add(Expr $expr)
$node = $expr->getNode();
if ($this->node instanceof ArrayNode) {
$this->node->add($node, $expr->isAllowDefault());
} elseif ($this->node instanceof ObjectNode) {
$this->node->add($expr->getKey(), $node, $expr->isAllowDefault());
} else {
throw new \InvalidArgumentException(sprintf('Node does not support a child!'));
$this->node = $node;
return $this;
public function end()
$this->node = $this->node->getParent();
* @return Query
public function query()
return new Query($this->node);