diff --git a/src/Core/DB/DB.php b/src/Core/DB/DB.php index d1ff24abce..ec9236ea5d 100644 --- a/src/Core/DB/DB.php +++ b/src/Core/DB/DB.php @@ -35,6 +35,7 @@ use Doctrine\Common\Collections\Criteria; use Doctrine\Common\Collections\ExpressionBuilder; use Doctrine\ORM\EntityManagerInterface; use Doctrine\ORM\Query; +use Doctrine\ORM\Query\ResultSetMappingBuilder; use Exception; abstract class DB @@ -55,6 +56,22 @@ abstract class DB return $q->getResult(); } + public static function sql(string $query, array $entities, array $params = []) + { + $rsm = new ResultSetMappingBuilder(self::$em); + foreach ($entities as $alias => $entity) { + $rsm->addRootEntityFromClassMetadata($entity, $alias); + } + $query = preg_replace('/{select}/', $rsm->generateSelectClause(), $query); + $q = self::$em->createNativeQuery($query, $rsm); + foreach ($params as $k => $v) { + $q->setParameter($k, $v); + } + // dump($q); + // die(); + return $q->getResult(); + } + private static array $find_by_ops = ['or', 'and', 'eq', 'neq', 'lt', 'lte', 'gt', 'gte', 'is_null', 'in', 'not_in', 'contains', 'member_of', 'starts_with', 'ends_with', ];