コード例 #1
0
 /**
  * Testing fieldsOrLike
  *
  * @return void
  */
 public function testFieldsOrLike()
 {
     $builder = new ExpressionBuilder();
     /** @var Expr\Orx $result */
     $result = $builder->fieldsOrLike('testField1,testField2,testField3', 'testValue1');
     $this->assertInstanceOf(Expr\Orx::class, $result);
     $this->assertCount(3, $result->getParts());
 }
コード例 #2
0
ファイル: Criteria.php プロジェクト: webowy/doctrine
 /**
  * @param QueryBuilder $queryBuilder
  * @return void
  */
 public function __invoke(QueryBuilder $queryBuilder)
 {
     $options = $this->getOptions();
     if (!$options->getCriteria()) {
         return null;
     }
     $fieldMapping = $options->getFieldMapping();
     $valueTypeMapping = $options->getValueTypeMapping();
     $expressionBuilder = new ExpressionBuilder();
     $parameters = [];
     foreach ($options->getCriteria() as $field => $value) {
         if ($value != '') {
             $queryField = $field;
             if (array_key_exists($field, $fieldMapping)) {
                 $queryField = $fieldMapping[$field];
             }
             $method = 'eq';
             if (array_key_exists($field, $valueTypeMapping)) {
                 $method = $valueTypeMapping[$field];
             }
             if (is_array($method)) {
                 $value = explode($method[1], $value);
                 $method = $method[0];
             }
             switch ($method) {
                 case self::LIKE_LEFT:
                     $value = '%' . $value;
                     break;
                 case self::LIKE:
                     $value = '%' . $value . '%';
                     break;
                 case self::LIKE_RIGHT:
                     $value .= '%';
                     break;
             }
             if ($method === self::FIELD_TO_FIELD) {
                 $queryBuilder->andWhere($expressionBuilder->eq($queryField, $value));
             } else {
                 if (method_exists($expressionBuilder, $method)) {
                     if (is_array($value) && $method !== self::IN && $method !== self::NOT_IN) {
                         call_user_func_array([$expressionBuilder, $method], $value);
                     } else {
                         $parameterNumber = $expressionBuilder->getNextParameterNumber();
                         $parameters[$parameterNumber] = $value;
                         $queryBuilder->andWhere($expressionBuilder->{$method}($queryField, '?' . $parameterNumber));
                     }
                 }
             }
         }
     }
     $queryBuilder->setParameters($parameters);
 }