Doctrine 2를 사용하여 원시 SQL을 실행하고 싶습니다.
데이터베이스 테이블을 자르고 기본 테스트 데이터로 테이블을 초기화해야합니다.
답변
다음은 제가하고있는 Doctrine 2의 원시 쿼리의 예입니다.
public function getAuthoritativeSportsRecords()
{
$sql = "
SELECT name,
event_type,
sport_type,
level
FROM vnn_sport
";
$em = $this->getDoctrine()->getManager();
$stmt = $em->getConnection()->prepare($sql);
$stmt->execute();
return $stmt->fetchAll();
}
답변
//$sql - sql statement
//$em - entity manager
$em->getConnection()->exec( $sql );
답변
나는 당신이 PDO를 사용하고 있다고 가정하고 이것을 수행하여 작동하도록했습니다.
//Place query here, let's say you want all the users that have blue as their favorite color
$sql = "SELECT name FROM user WHERE favorite_color = :color";
//set parameters
//you may set as many parameters as you have on your query
$params['color'] = blue;
//create the prepared statement, by getting the doctrine connection
$stmt = $this->entityManager->getConnection()->prepare($sql);
$stmt->execute($params);
//I used FETCH_COLUMN because I only needed one Column.
return $stmt->fetchAll(PDO::FETCH_COLUMN);
필요에 맞게 FETCH_TYPE을 변경할 수 있습니다.
답변
원시 쿼리를 실행하고 데이터를 반환하는 방법.
관리자와 연결하고 새로운 연결을 만드십시오.
$manager = $this->getDoctrine()->getManager();
$conn = $manager->getConnection();
쿼리를 만들고 fetchAll :
$result= $conn->query('select foobar from mytable')->fetchAll();
다음과 같은 결과에서 데이터를 가져옵니다.
$this->appendStringToFile("first row foobar is: " . $result[0]['foobar']);
답변
나는 대답이 아마도 다음과 같다는 것을 알았습니다.
NativeQuery를 사용하면 기본 SQL을 실행하여 사양에 따라 결과를 매핑 할 수 있습니다. SQL 결과 집합이 Doctrine 결과에 매핑되는 방법을 설명하는 이러한 사양은 ResultSetMapping으로 표시됩니다.
출처 : Native SQL .
답변
나는 같은 문제가 있었다. 엔티티 관리자가 제공하는 연결 객체를보고 싶습니다.
$conn = $em->getConnection();
그런 다음 직접 쿼리 / 실행할 수 있습니다.
$statement = $conn->query('select foo from bar');
$num_rows_effected = $conn->exec('update bar set foo=1');
연결 개체에 대한 문서는 http://www.doctrine-project.org/api/dbal/2.0/doctrine/dbal/connection.html 을 참조하십시오.
답변
모델에서 원시 SQL 문을 만듭니다 (아래 예제는 내가 사용해야하지만 자신의 것으로 대체해야하는 날짜 간격의 예입니다. SELECT를 수행하는 경우 execute () 호출에-> fetchall () 추가).
$sql = "DELETE FROM tmp
WHERE lastedit + INTERVAL '5 minute' < NOW() ";
$stmt = $this->getServiceLocator()
->get('Doctrine\ORM\EntityManager')
->getConnection()
->prepare($sql);
$stmt->execute();