Expression Builder
==================

The Expression Builder is a convenient fluent interface for
building expressions to be used with the ``Doctrine\Common\Collections\Criteria``
class:

.. code-block:: php
    $expressionBuilder = Criteria::expr();

    $criteria = new Criteria();
    $criteria->where($expressionBuilder->eq('name', 'jwage'));
    $criteria->orWhere($expressionBuilder->eq('name', 'romanb'));

    $collection->matching($criteria);

The ``ExpressionBuilder`` has the following API:

andX
----

.. code-block:: php
    $expressionBuilder = Criteria::expr();

    $expression = $expressionBuilder->andX(
        $expressionBuilder->eq('foo', 1),
        $expressionBuilder->eq('bar', 1)
    );

    $collection->matching(new Criteria($expression));

orX
---

.. code-block:: php
    $expressionBuilder = Criteria::expr();

    $expression = $expressionBuilder->orX(
        $expressionBuilder->eq('foo', 1),
        $expressionBuilder->eq('bar', 1)
    );

    $collection->matching(new Criteria($expression));

not
---

.. code-block:: php
    $expressionBuilder = Criteria::expr();

    $expression = $expressionBuilder->not(
        $expressionBuilder->eq('foo', 1)
    );

    $collection->matching(new Criteria($expression));

eq
---

.. code-block:: php
    $expressionBuilder = Criteria::expr();

    $expression = $expressionBuilder->eq('foo', 1);

    $collection->matching(new Criteria($expression));

gt
---

.. code-block:: php
    $expressionBuilder = Criteria::expr();

    $expression = $expressionBuilder->gt('foo', 1);

    $collection->matching(new Criteria($expression));

lt
---

.. code-block:: php
    $expressionBuilder = Criteria::expr();

    $expression = $expressionBuilder->lt('foo', 1);

    $collection->matching(new Criteria($expression));

gte
---

.. code-block:: php
    $expressionBuilder = Criteria::expr();

    $expression = $expressionBuilder->gte('foo', 1);

    $collection->matching(new Criteria($expression));

lte
---

.. code-block:: php
    $expressionBuilder = Criteria::expr();

    $expression = $expressionBuilder->lte('foo', 1);

    $collection->matching(new Criteria($expression));

neq
---

.. code-block:: php
    $expressionBuilder = Criteria::expr();

    $expression = $expressionBuilder->neq('foo', 1);

    $collection->matching(new Criteria($expression));

isNull
------

.. code-block:: php
    $expressionBuilder = Criteria::expr();

    $expression = $expressionBuilder->isNull('foo');

    $collection->matching(new Criteria($expression));

isNotNull
---------

.. code-block:: php
    $expressionBuilder = Criteria::expr();

    $expression = $expressionBuilder->isNotNull('foo');

    $collection->matching(new Criteria($expression));

in
---

.. code-block:: php
    $expressionBuilder = Criteria::expr();

    $expression = $expressionBuilder->in('foo', ['value1', 'value2']);

    $collection->matching(new Criteria($expression));

notIn
-----

.. code-block:: php
    $expressionBuilder = Criteria::expr();

    $expression = $expressionBuilder->notIn('foo', ['value1', 'value2']);

    $collection->matching(new Criteria($expression));

contains
--------

.. code-block:: php
    $expressionBuilder = Criteria::expr();

    $expression = $expressionBuilder->contains('foo', 'value1');

    $collection->matching(new Criteria($expression));

memberOf
--------

.. code-block:: php
    $expressionBuilder = Criteria::expr();

    $expression = $expressionBuilder->memberOf('foo', ['value1', 'value2']);

    $collection->matching(new Criteria($expression));

startsWith
----------

.. code-block:: php
    $expressionBuilder = Criteria::expr();

    $expression = $expressionBuilder->startsWith('foo', 'hello');

    $collection->matching(new Criteria($expression));

endsWith
--------

.. code-block:: php
    $expressionBuilder = Criteria::expr();

    $expression = $expressionBuilder->endsWith('foo', 'world');

    $collection->matching(new Criteria($expression));
