태그 보관물: doctrine

doctrine

Doctrine 2를 사용하여 원시 SQL 실행 싶습니다. 데이터베이스 테이블을

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();