vendor/doctrine/orm/lib/Doctrine/ORM/Query/Filter/SQLFilter.php line 107

Open in your IDE?
  1. <?php
  2. /*
  3.  * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
  4.  * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
  5.  * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
  6.  * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
  7.  * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
  8.  * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
  9.  * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
  10.  * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
  11.  * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
  12.  * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
  13.  * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
  14.  *
  15.  * This software consists of voluntary contributions made by many individuals
  16.  * and is licensed under the MIT license. For more information, see
  17.  * <http://www.doctrine-project.org>.
  18.  */
  19. namespace Doctrine\ORM\Query\Filter;
  20. use Doctrine\ORM\EntityManagerInterface;
  21. use Doctrine\ORM\Mapping\ClassMetadata;
  22. use Doctrine\ORM\Query\ParameterTypeInferer;
  23. /**
  24.  * The base class that user defined filters should extend.
  25.  *
  26.  * Handles the setting and escaping of parameters.
  27.  *
  28.  * @author Alexander <iam.asm89@gmail.com>
  29.  * @author Benjamin Eberlei <kontakt@beberlei.de>
  30.  * @abstract
  31.  */
  32. abstract class SQLFilter
  33. {
  34.     /**
  35.      * The entity manager.
  36.      *
  37.      * @var EntityManagerInterface
  38.      */
  39.     private $em;
  40.     /**
  41.      * Parameters for the filter.
  42.      *
  43.      * @var array
  44.      */
  45.     private $parameters = [];
  46.     /**
  47.      * Constructs the SQLFilter object.
  48.      *
  49.      * @param EntityManagerInterface $em The entity manager.
  50.      */
  51.     final public function __construct(EntityManagerInterface $em)
  52.     {
  53.         $this->em $em;
  54.     }
  55.     /**
  56.      * Sets a parameter that can be used by the filter.
  57.      *
  58.      * @param string      $name  Name of the parameter.
  59.      * @param string      $value Value of the parameter.
  60.      * @param string|null $type  The parameter type. If specified, the given value will be run through
  61.      *                           the type conversion of this type. This is usually not needed for
  62.      *                           strings and numeric types.
  63.      *
  64.      * @return self The current SQL filter.
  65.      */
  66.     final public function setParameter($name$value$type null) : self
  67.     {
  68.         if (null === $type) {
  69.             $type ParameterTypeInferer::inferType($value);
  70.         }
  71.         $this->parameters[$name] = ['value' => $value'type' => $type];
  72.         // Keep the parameters sorted for the hash
  73.         ksort($this->parameters);
  74.         // The filter collection of the EM is now dirty
  75.         $this->em->getFilters()->setFiltersStateDirty();
  76.         return $this;
  77.     }
  78.     /**
  79.      * Gets a parameter to use in a query.
  80.      *
  81.      * The function is responsible for the right output escaping to use the
  82.      * value in a query.
  83.      *
  84.      * @param string $name Name of the parameter.
  85.      *
  86.      * @return string The SQL escaped parameter to use in a query.
  87.      *
  88.      * @throws \InvalidArgumentException
  89.      */
  90.     final public function getParameter($name)
  91.     {
  92.         if (!isset($this->parameters[$name])) {
  93.             throw new \InvalidArgumentException("Parameter '" $name "' does not exist.");
  94.         }
  95.         return $this->em->getConnection()->quote($this->parameters[$name]['value'], $this->parameters[$name]['type']);
  96.     }
  97.     /**
  98.      * Checks if a parameter was set for the filter.
  99.      *
  100.      * @param string $name Name of the parameter.
  101.      *
  102.      * @return boolean
  103.      */
  104.     final public function hasParameter($name)
  105.     {
  106.         if (!isset($this->parameters[$name])) {
  107.             return false;
  108.         }
  109.         return true;
  110.     }
  111.     /**
  112.      * Returns as string representation of the SQLFilter parameters (the state).
  113.      *
  114.      * @return string String representation of the SQLFilter.
  115.      */
  116.     final public function __toString()
  117.     {
  118.         return serialize($this->parameters);
  119.     }
  120.     /**
  121.      * Returns the database connection used by the entity manager
  122.      *
  123.      * @return \Doctrine\DBAL\Connection
  124.      */
  125.     final protected function getConnection()
  126.     {
  127.         return $this->em->getConnection();
  128.     }
  129.     /**
  130.      * Gets the SQL query part to add to a query.
  131.      *
  132.      * @param ClassMetaData $targetEntity
  133.      * @param string        $targetTableAlias
  134.      *
  135.      * @return string The constraint SQL if there is available, empty string otherwise.
  136.      */
  137.     abstract public function addFilterConstraint(ClassMetadata $targetEntity$targetTableAlias);
  138. }