복붙노트

[SQL] 교리와 원시 SQL을 사용하여

SQL

교리와 원시 SQL을 사용하여

난 내 응용 프로그램에서 보고서를 생성하는 데 사용할 필요가 일부 매우 복잡한 쿼리가 있습니다. 내 ORM로 내 프레임 워크와 교리로 심포니를 사용하고 있습니다.

내 질문은 이것이다 :

교리 쿼리 언어로 변환하지 않고 직접 교리에 매우 복잡한 SQL 쿼리를 전달하는 가장 좋은 방법은 무엇입니까? 나는 Raw_SQL 확장에 대해 읽어 봤는데하지만 당신은 여전히 ​​절에 쿼리를 전달해야 할 것으로 보인다 (에서와 같이 ()). 단지 원시 SQL 명령의 무리에 투기가 무엇인가?

해결법

  1. ==============================

    1.

    $q = Doctrine_Manager::getInstance()->getCurrentConnection();
    $result = $q->execute(" -- RAW SQL HERE -- ");
    

    다른 실행 방법에 대한 교리의 API 문서를 참조하십시오.

  2. ==============================

    2.예. 다음 코드를 사용하여 교리에서 데이터베이스 핸들을 얻을 수 있습니다 :

    예. 다음 코드를 사용하여 교리에서 데이터베이스 핸들을 얻을 수 있습니다 :

    $pdo = Doctrine_Manager::getInstance()->getCurrentConnection()->getDbh();
    

    다음과 같이 다음 SQL을 실행합니다 :

    $query = "SELECT * FROM table WHERE param1 = :param1 AND param2 = :param2";
    $stmt = $pdo->prepare($query);
    
    $params = array(
      "param1"  => "value1",
      "param2"  => "value2"
    );
    $stmt->execute($params);
    
    $results = $stmt->fetchAll();  
    

    당신은 위의 예에서와 같이 바인드 변수를 사용할 수 있습니다.

    당신이 결과를 (열 값으로 키 - 값) 행 당 하나 개의 배열로 반환 구성된 배열로 반환 처리해야하므로 교리가 자동으로 기록에 잘 결과를 수화하지 않습니다, 등등 객체.

  3. ==============================

    3.나는 확실히 당신은 원시 SQL을 말하고 무엇을 의미합니까 아니지만, 당신은 기존의 SQL 이런 식으로 쿼리를 실행할 수 있습니다 :

    나는 확실히 당신은 원시 SQL을 말하고 무엇을 의미합니까 아니지만, 당신은 기존의 SQL 이런 식으로 쿼리를 실행할 수 있습니다 :

    ... 
    // $this->_displayPortabilityWarning();
    
    $conn = Doctrine_Manager::connection();
    $pdo = $conn->execute($sql);
    $pdo->setFetchMode(Doctrine_Core::FETCH_ASSOC);
    $result = $pdo->fetchAll();
    ...
    

    다음 방법은 필요하지 않지만 그것은 좋은 연습을 보여줍니다.

    protected function _displayPortabilityWarning($engine = 'pgsql')
    {
         $conn = Doctrine_Manager::connection();
         $driver = $conn->getDriverName();
    
         if (strtolower($engine) != strtolower($driver)) {
            trigger_error('Here we have possible database portability issue. This code was tested on ' . $engine . ' but you are trying to run it on ' . $driver, E_USER_NOTICE);
         }
    }
    
  4. ==============================

    4.또한 Doctrine_RawSql ()를 사용할 수 있습니다; 교리 객체에 수분을 공급합니다 원시 SQL 쿼리를 만들 수 있습니다.

    또한 Doctrine_RawSql ()를 사용할 수 있습니다; 교리 객체에 수분을 공급합니다 원시 SQL 쿼리를 만들 수 있습니다.

  5. ==============================

    5.Doctrine2가 사용하는, 따라서 나는 오래된 일반 실행을 통해 준비된 문을 사용하는 것이 좋습니다 것, 도심 PDO 것을 주목해야한다.

    Doctrine2가 사용하는, 따라서 나는 오래된 일반 실행을 통해 준비된 문을 사용하는 것이 좋습니다 것, 도심 PDO 것을 주목해야한다.

    예:

    $db = Doctrine_Manager::getInstance()->getCurrentConnection();
    $query = $db->prepare("SELECT `someField` FROM `someTable` WHERE `field` = :value");
    $query->execute(array('value' => 'someValue'));
    
  6. ==============================

    6.교리를 사용하여 원시 SQL을 삽입 심포니.

    교리를 사용하여 원시 SQL을 삽입 심포니.

    이의 버전 Symfoney 1.3

    $q = Doctrine_Manager::getInstance()->getCurrentConnection();
    $result = $q->execute($query);
    
  7. from https://stackoverflow.com/questions/2774947/using-raw-sql-with-doctrine by cc-by-sa and MIT license