sourcecode

Dutrin NativeQuery를 사용하여 단일 행 결과 가져오기

codebag 2023. 8. 1. 20:31
반응형

Dutrin NativeQuery를 사용하여 단일 행 결과 가져오기

독트린과의 네이티브 쿼리에서 단일 행을 반환받으려고 합니다.내 코드는 다음과 같습니다.

$rsm = new ResultSetMapping;
$rsm->addEntityResult('VNNCoreBundle:Player', 'p');
$rsm->addFieldResult('p', 'player_id', 'id');

$sql = " 
    SELECT player_id
      FROM players p
     WHERE CONCAT(p.first_name, ' ', p.last_name) = ?
";

$query = $this->getEntityManager()->createNativeQuery($sql, $rsm);
$query->setParameter(1, $name);
$players = $query->getResult();

그 마지막 줄은 선수들의 목록을 반환하지만 나는 단지 하나의 결과를 원합니다.그걸 어떻게 하는 거죠?

사용할 수 있습니다.$query->getSingleResult()둘 이상의 결과가 발견되거나 결과가 발견되지 않을 경우 예외가 발생합니다.(여기 https://github.com/doctrine/doctrine2/blob/master/lib/Doctrine/ORM/AbstractQuery.php#L791) 관련 Phpdoc 참조)

덜 유명한 것도 있습니다.$query->getOneOrNullResult()둘 이상의 결과가 발견되면 예외를 던지고, 결과가 발견되지 않으면 null을 반환합니다.(여기 https://github.com/doctrine/doctrine2/blob/master/lib/Doctrine/ORM/AbstractQuery.php#L752) 관련 Phpdoc 참조)

둘다요.getSingleResult()그리고.getOneOrNullResult()둘 이상의 결과가 있을 경우 예외를 던집니다.이 문제를 해결하기 위해 추가할 수 있습니다.setMaxResults(1)쿼리 작성기로 이동합니다.

 $firstSubscriber = $entity->createQueryBuilder()->select('sub')
        ->from("\Application\Entity\Subscriber", 'sub')
        ->where('sub.subscribe=:isSubscribe')
        ->setParameter('isSubscribe', 1)  
        ->setMaxResults(1)
        ->getQuery()
        ->getOneOrNullResult();

->getSingleScalarResult()는 배열 대신 단일 값을 반환합니다.

나는 단지 하나의 결과를 원합니다.

하나의 행만 반환될 것임을 의미합니다.예를 들어 쿼리를 수정합니다.

SELECT player_id
FROM players p
WHERE CONCAT(p.first_name, ' ', p.last_name) = ?
LIMIT 0, 1

(그리고 나서 사용)getSingleResult()AdrienBrault) 또는 배열로 행을 가져오고 첫 번째 항목에 액세스합니다.

// ...
$players = $query->getArrayResult();
$myPlayer = $players[0];

여기서는 Symfony 4.4를 사용한 작은 예로 fetchObject()를 사용합니다.

    <?php 
    use Doctrine\DBAL\Driver\Connection;

    class MyController{

    public function index($username){
      $queryBuilder = $connection->createQueryBuilder();
      $queryBuilder
        ->select('id', 'name')
        ->from('app_user')
        ->where('name = ?')
        ->setParameter(0, $username)
        ->setMaxResults(1);
      $stmUser = $queryBuilder->execute();

      dump($stmUser->fetchObject());

      //get_class_methods($stmUser) -> to see all methods
    }
  }

응답:

{ 
"id": "2", "name":"myuser"
}

단일 행 가져오기

$result = $this->getEntityManager()->getConnection()->fetchAssoc($sql)

모든 레코드 가져오기

$result = $this->getEntityManager()->getConnection()->fetchAll($sql)

여기서 sql 네이티브 쿼리를 사용할 수 있습니다. 모두 문제 없이 작동합니다.

언급URL : https://stackoverflow.com/questions/11348604/get-single-row-result-with-doctrine-nativequery

반응형