programing

Dunction2에서 SQL의 YEAR(), MONTH() 및 DAY()를 어떻게 사용할 수 있습니까?

batch 2023. 7. 25. 20:46
반응형

Dunction2에서 SQL의 YEAR(), MONTH() 및 DAY()를 어떻게 사용할 수 있습니까?

네이티브 SQL에서 다음과 같은 쿼리를 수행하려고 합니다.

SELECT
    AVG(t.column) AS average_value
FROM
    table t
WHERE
    YEAR(t.timestamp) = 2013 AND
    MONTH(t.timestamp) = 09 AND
    DAY(t.timestamp) = 16 AND
    t.somethingelse LIKE 'somethingelse'
GROUP BY
    t.somethingelse;

만약 내가 이것을 Dutrin의 쿼리 작성기에서 다음과 같이 구현하려고 한다면:

$qb = $this->getDoctrine()->createQueryBuilder();
$qb->select('e.column AS average_value')
   ->from('MyBundle:MyEntity', 'e')
   ->where('YEAR(e.timestamp) = 2013')
   ->andWhere('MONTH(e.timestamp) = 09')
   ->andWhere('DAY(e.timestamp) = 16')
   ->andWhere('u.somethingelse LIKE somethingelse')
   ->groupBy('somethingelse');

오류 예외가 발생합니다.

[문자 오류] 라인 0, col 63: 오류: 알려진 함수 예상, 'YEAR' 발생

교리 쿼리 작성기로 쿼리를 구현하려면 어떻게 해야 합니까?

주의:

  • 나는 독트린의 네이티브 SQL에 대해 알고 있습니다.저는 이것을 시도해 보았지만, 생산적인 데이터베이스 테이블과 개발 데이터베이스 테이블의 이름이 다르다는 문제가 발생했습니다.데이터베이스에 구애받지 않는 작업을 수행하고 싶으므로 이 옵션은 사용할 수 없습니다.
  • 저는 데이터베이스 진단 작업을 하고 싶지만, 참고로 저는 MySQL을 사용하고 있습니다.
  • 독트린을 확장하여 "학습"할 수 있는 방법이 있습니다.YEAR()예를 들어, 여기서 보는 과 같은 진술.하지만 타사 플러그인을 포함하지 않을 방법을 찾고 있습니다.

MySql을 사용할 수 있도록 독트린 확장을 추가할 수 있습니다.YEAR그리고.MONTHSymfony를 사용하는 경우 이 구성을 추가하여 설명합니다.

doctrine:
    orm:
        dql:
            string_functions:
                MONTH: DoctrineExtensions\Query\Mysql\Month
                YEAR: DoctrineExtensions\Query\Mysql\Year

이제 DQL 또는 쿼리 작성기에서 MONG 및 YEAR 문을 사용할 수 있습니다.

참고: 이 확장은 MySQL, Oracle, Postgre를 지원합니다.SQL 및 SQLite.

Symfony 4에서는 Dutrin을 설치해야 합니다.확장:

composer require beberlei/DoctrineExtensions

그런 다음 다음 다음과 같이 독트린 구성 파일(config/packages/docctrine.yaml)을 편집합니다.

doctrine:
    orm:
        dql:
            string_functions:
                MONTH: DoctrineExtensions\Query\Mysql\Month
                YEAR: DoctrineExtensions\Query\Mysql\Year

orocrm/messages-extension도 좋은 프로젝트인 것 같습니다.

MySQL과 PostgreSql모두 지원합니다. 목표는 교차 DB입니다.

Symphony 4의 경우:

  1. 설치: 작곡가에게 beberlei/docrine 확장이 필요합니다.
  2. 편집: config\packages\docrine.
    doctrine:
        orm:
            dql:
                datetime_functions:
                    DAY: DoctrineExtensions\Query\Mysql\Day
                    MONTH: DoctrineExtensions\Query\Mysql\Month
                    YEAR: DoctrineExtensions\Query\Mysql\Year
  1. 컨트롤러 편집:
    public function somex()
    {
        $em = $this->getDoctrine()->getManager();

        $emConfig = $em->getConfiguration();
        $emConfig->addCustomDatetimeFunction('YEAR', 'DoctrineExtensions\Query\Mysql\Year');
        $emConfig->addCustomDatetimeFunction('MONTH', 'DoctrineExtensions\Query\Mysql\Month');
        $emConfig->addCustomDatetimeFunction('DAY', 'DoctrineExtensions\Query\Mysql\Day');

        $day = '22';
        $month = '4';

        $qb = $em->createQueryBuilder()
            ->select('u')
            ->from('App\Entity\User', 'u')
            ->where('DAY(u.somedate) = :day')
            ->andwhere('MONTH(u.somedate) = :month')
            ->setParameter('month', $day)
            ->setParameter('day', $month)
        ;
        $trab = $qb->getQuery()->getResult();


        return $this->render('intranet/somex.html.twig', [
            'trab' => $trab
        ]);
    }
    ````

페이지로 이동하여 데이터베이스 시스템을 선택하고 원하는 기능을 선택합니다.

저도 당신과 같은 문제를 겪었습니다.그런 다음 github 파일과 정확하게 동일한 이름을 사용하여 내 dinction.yaml 파일을 수정했고 작동했습니다.

언급URL : https://stackoverflow.com/questions/18826836/how-can-i-use-sqls-year-month-and-day-in-doctrine2

반응형