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
'sourcecode' 카테고리의 다른 글
AJAX에서 GET vs POST? (0) | 2023.08.01 |
---|---|
라라벨 웅변가 관계 가져오기 카운트 (0) | 2023.08.01 |
키와 비밀 대신 IAM 역할을 사용하도록 이 Spring-Boot 앱을 구성하는 방법은 무엇입니까? (0) | 2023.08.01 |
Android에서 뒤로 단추 사용 안 함 (0) | 2023.08.01 |
Simple Spring @CreatedDate 주석이 작동하지 않습니다. (0) | 2023.08.01 |