diff --git a/src/module/Application/config/doctrine.config.php b/src/module/Application/config/doctrine.config.php index 8fd4602..12f96a1 100755 --- a/src/module/Application/config/doctrine.config.php +++ b/src/module/Application/config/doctrine.config.php @@ -3,6 +3,7 @@ namespace Application; use Ainias\Core\Connections\MyConnection; +use Application\DoctrineExtensions\CharLength; use Doctrine\ORM\Mapping\Driver\AnnotationDriver; return array( @@ -10,7 +11,7 @@ return array( 'driver' => array( 'orm_default' => array( 'drivers' => array( - __NAMESPACE__.'\Model' => 'entities_default', + __NAMESPACE__ . '\Model' => 'entities_default', ), ), 'entities_default' => array( @@ -19,5 +20,12 @@ return array( ) ) ), + 'configuration' => [ + 'orm_default' => [ + 'numeric_functions' => [ + 'CHAR_LENGTH' => CharLength::class, + ], + ], + ], ), ); diff --git a/src/module/Application/src/DoctrineExtensions/CharLength.php b/src/module/Application/src/DoctrineExtensions/CharLength.php new file mode 100644 index 0000000..ad1ec0a --- /dev/null +++ b/src/module/Application/src/DoctrineExtensions/CharLength.php @@ -0,0 +1,30 @@ +walkArithmeticPrimary($this->expr1).')'; + } + public function parse(\Doctrine\ORM\Query\Parser $parser) + { + $parser->match(Lexer::T_IDENTIFIER); + $parser->match(Lexer::T_OPEN_PARENTHESIS); + $this->expr1 = $parser->ArithmeticExpression(); + $parser->match(Lexer::T_CLOSE_PARENTHESIS); + } +} \ No newline at end of file diff --git a/src/module/Application/src/Model/Repository/WordRepository.php b/src/module/Application/src/Model/Repository/WordRepository.php index 693cc66..95e36e9 100755 --- a/src/module/Application/src/Model/Repository/WordRepository.php +++ b/src/module/Application/src/Model/Repository/WordRepository.php @@ -56,8 +56,8 @@ class WordRepository extends StandardRepository $offset = rand(0,$numberWords-1); $queryBuilder->andWhere($queryBuilder->expr()->eq("w.checked", "0")); - $queryBuilder->andWhere($queryBuilder->expr()->gte($queryBuilder->expr()->length("w.word"), ":minLength")); - $queryBuilder->andWhere($queryBuilder->expr()->lte($queryBuilder->expr()->length("w.word"), ":maxLength")); + $queryBuilder->andWhere($queryBuilder->expr()->gte("CHAR_LENGTH(w.word)", ":minLength")); + $queryBuilder->andWhere($queryBuilder->expr()->lte("CHAR_LENGTH(w.word)", ":maxLength")); $queryBuilder->setParameter("minLength", $minLength); $queryBuilder->setParameter("maxLength", $maxLength); $queryBuilder->setMaxResults(1); @@ -76,9 +76,11 @@ class WordRepository extends StandardRepository $queryBuilder = $this->_em->createQueryBuilder(); $queryBuilder->select("COUNT(w.id)")->from(Word::class, "w"); +// $queryBuilder->andWhere($queryBuilder->expr()->eq("w.word", "Sechsfüßer")); + $queryBuilder->andWhere($queryBuilder->expr()->eq("w.checked", "0")); - $queryBuilder->andWhere($queryBuilder->expr()->gte($queryBuilder->expr()->length("w.word"), ":minLength")); - $queryBuilder->andWhere($queryBuilder->expr()->lte($queryBuilder->expr()->length("w.word"), ":maxLength")); + $queryBuilder->andWhere($queryBuilder->expr()->gte("CHAR_LENGTH(w.word)", ":minLength")); + $queryBuilder->andWhere($queryBuilder->expr()->lte("CHAR_LENGTH(w.word)", ":maxLength")); $queryBuilder->setParameter("minLength", $minLength); $queryBuilder->setParameter("maxLength", $maxLength); $queryBuilder->setMaxResults(1); @@ -92,8 +94,8 @@ class WordRepository extends StandardRepository $queryBuilder->andWhere($queryBuilder->expr()->eq("w.checked", "1")); $queryBuilder->andWhere($queryBuilder->expr()->eq("w.deleted", "1")); - $queryBuilder->andWhere($queryBuilder->expr()->gte($queryBuilder->expr()->length("w.word"), ":minLength")); - $queryBuilder->andWhere($queryBuilder->expr()->lte($queryBuilder->expr()->length("w.word"), ":maxLength")); + $queryBuilder->andWhere($queryBuilder->expr()->gte("CHAR_LENGTH(w.word)", ":minLength")); + $queryBuilder->andWhere($queryBuilder->expr()->lte("CHAR_LENGTH(w.word)", ":maxLength")); $queryBuilder->setParameter("minLength", $minLength); $queryBuilder->setParameter("maxLength", $maxLength); $queryBuilder->setMaxResults(1); @@ -107,8 +109,8 @@ class WordRepository extends StandardRepository $queryBuilder->andWhere($queryBuilder->expr()->eq("w.checked", "1")); $queryBuilder->andWhere($queryBuilder->expr()->eq("w.deleted", "0")); - $queryBuilder->andWhere($queryBuilder->expr()->gte($queryBuilder->expr()->length("w.word"), ":minLength")); - $queryBuilder->andWhere($queryBuilder->expr()->lte($queryBuilder->expr()->length("w.word"), ":maxLength")); + $queryBuilder->andWhere($queryBuilder->expr()->gte("CHAR_LENGTH(w.word)", ":minLength")); + $queryBuilder->andWhere($queryBuilder->expr()->lte("CHAR_LENGTH(w.word)", ":maxLength")); $queryBuilder->setParameter("minLength", $minLength); $queryBuilder->setParameter("maxLength", $maxLength); $queryBuilder->setMaxResults(1); @@ -121,8 +123,8 @@ class WordRepository extends StandardRepository $queryBuilder->select("COUNT(w.id)")->from(Word::class, "w"); $queryBuilder->andWhere($queryBuilder->expr()->eq("w.checked", "-1")); - $queryBuilder->andWhere($queryBuilder->expr()->gte($queryBuilder->expr()->length("w.word"), ":minLength")); - $queryBuilder->andWhere($queryBuilder->expr()->lte($queryBuilder->expr()->length("w.word"), ":maxLength")); + $queryBuilder->andWhere($queryBuilder->expr()->gte("CHAR_LENGTH(w.word)", ":minLength")); + $queryBuilder->andWhere($queryBuilder->expr()->lte("CHAR_LENGTH(w.word)", ":maxLength")); $queryBuilder->setParameter("minLength", $minLength); $queryBuilder->setParameter("maxLength", $maxLength); $queryBuilder->setMaxResults(1); @@ -137,7 +139,7 @@ class WordRepository extends StandardRepository $queryBuilder->andWhere($queryBuilder->expr()->eq("w.checked", "1")); $queryBuilder->andWhere($queryBuilder->expr()->eq("w.deleted", "0")); $queryBuilder->andWhere($queryBuilder->expr()->eq("w.used", "0")); - $queryBuilder->andWhere($queryBuilder->expr()->eq($queryBuilder->expr()->length("w.word"), ":length")); + $queryBuilder->andWhere($queryBuilder->expr()->eq("CHAR_LENGTH(w.word)", ":length")); $queryBuilder->setParameter("length", $length); return $queryBuilder->getQuery()->getResult(); } @@ -150,8 +152,8 @@ class WordRepository extends StandardRepository $queryBuilder->andWhere($queryBuilder->expr()->eq("w.checked", "1")); $queryBuilder->andWhere($queryBuilder->expr()->eq("w.deleted", "0")); $queryBuilder->andWhere($queryBuilder->expr()->eq("w.used", "0")); - $queryBuilder->andWhere($queryBuilder->expr()->gte($queryBuilder->expr()->length("w.word"), ":minLength")); - $queryBuilder->andWhere($queryBuilder->expr()->lte($queryBuilder->expr()->length("w.word"), ":maxLength")); + $queryBuilder->andWhere($queryBuilder->expr()->gte("CHAR_LENGTH(w.word)", ":minLength")); + $queryBuilder->andWhere($queryBuilder->expr()->lte("CHAR_LENGTH(w.word)", ":maxLength")); $queryBuilder->setParameter("minLength", $minLength); $queryBuilder->setParameter("maxLength", $maxLength); $queryBuilder->setMaxResults(1);