2013-01-19 2 views
9

테이블에 간단한 열이 필요합니다.하나의 열 선택 Doctrine DQL

예를 들어, 테이블 id, nameyear이있는 테이블 "프로젝트".

내가 할 경우 :

$q = Doctrine_Query::create() 
     ->select('a.pro_id') 
     ->from('fndr_proyecto a') 
     ->where('a.pro_id =?',1); 
    $pro = $q->execute(); 
    json_encode($pro->toArray()); 

대답은

{"id":1,"name":"Project name","year":2013} 

같은 모든 열하지만 난 단 하나의 열이 필요합니다. 예상 :

{"id":1} 

네이티브 SQL이 정상적으로 작동하므로 DQL과 함께 사용됩니다.

ORM은 시각적 패러다임을 통해 자동으로 빌드됩니다.

답변

26

Doctrine이 모든 개체 정보와 응답을하기 때문에 모든 열이 그렇습니다. 기본 한

  • HYDRATE_ARRAY
  • HYDRATE_NONE
  • HYDRATE_SCALAR
  • HYDRATE_ARRAY_SHALLOW에게,

    • HYDRATE_RECORD :

      당신은 다른 수화 방법, there are many one를 사용하지만 이제 그 중 5에 초점을 맞출 수 있도록해야합니다

    HYDRATE_ARRAY_SHALLOW 수화 방법이 필요합니다. 이유가 여기 있습니다.

    1. HYDRATE_RECORD

      $q = Doctrine_Query::create() 
          ->select('a.pro_id') 
          ->from('fndr_proyecto a') 
          ->where('a.pro_id = ?',1); 
      $pro = $q->execute(array(), Doctrine_Core::HYDRATE_RECORD); 
      var_dump(json_encode($pro->toArray())); 
      

      이 객체를 사용하여 결과를 수화하고, (당신이 당신의 쿼리 내부 leftJoin를 사용하는 경우)도 관계를 수화됩니다.배열은 자동으로 기본 키를 추가

      [{"id":1,"name":"Project name","year":2013}]" 
      
    2. HYDRATE_ARRAY이 결과를 수화 것이다

      $q = Doctrine_Query::create() 
          ->select('a.pro_id') 
          ->from('fndr_proyecto a') 
          ->where('a.pro_id = ?',1); 
      $pro = $q->execute(array(), Doctrine_Core::HYDRATE_ARRAY); 
      var_dump(json_encode($pro)); 
      

      : 그것은 개체를 반환하기 때문에, 우리는 propre의 JSON을 보낼 수 있도록 toArray()를 호출해야 :

      [{"id":"1","pro_id":"1"}]" 
      
    3. HYDRATE_NONE

      $q = Doctrine_Query::create() 
          ->select('a.pro_id') 
          ->from('fndr_proyecto a') 
          ->where('a.pro_id = ?',1); 
      $pro = $q->execute(array(), Doctrine_Core::HYDRATE_NONE); 
      var_dump(json_encode($pro)); 
      

      이 결과를 수화, 그냥 반환하지 않습니다는 값 :

      [["1"]]" 
      
    4. HYDRATE_SCALAR을이 선택에서하지만 같은 주요 지수 결과를 수화 것이다

      $q = Doctrine_Query::create() 
          ->select('a.pro_id') 
          ->from('fndr_proyecto a') 
          ->where('a.pro_id = ?',1); 
      $pro = $q->execute(array(), Doctrine_Core::HYDRATE_SCALAR); 
      var_dump(json_encode($pro)); 
      

      테이블 별명이있는 열의 이름 :

      [{"a_pro_id":"1"}]" 
      
    5. HYDRATE_ARRAY_SHALLOW

      $q = Doctrine_Query::create() 
          ->select('a.pro_id') 
          ->from('fndr_proyecto a') 
          ->where('a.pro_id = ?',1); 
      $pro = $q->execute(array(), Doctrine_Core::HYDRATE_ARRAY_SHALLOW); 
      var_dump(json_encode($pro)); 
      

      이 테이블 별칭없이 선택에서하지만 열 이름과 같은 주요 지수 결과를 수화됩니다

      "[{"pro_id":"1"}]" 
      
  • +0

    입니다. 이제 문서 "Data Hydrators"에서 해당 장을 찾으십시오. 나는 그것이 주제에 관한 것이 었는지 몰랐다. 대단히 감사합니다! ;) –

    +0

    @ h3g0r_ 어레이 수화는 종종 기록 수화보다 빠르고 가볍습니다. – j0k

    +0

    아주 좋은 설명, 나는 항상 hydrators 작동하는 방법에 대해 당황했습니다,하지만 지금은 모두 내 마음에 분명하다. 감사 ! – TwystO

    0

    아니에요 Doctrine j0k의 어떤 버전이 사용되었는지 확인하십시오. 몇 가지 답변을 제공했지만 Doctrine_Query 및 Doctrine_Core 클래스를 찾는 데 어려움이있었습니다. 나는 교리 2.3.4를 사용하고있다. 다음은 나를 위해 일했습니다.

    public static function getAllEventIDs($em) { 
        return parent::getAllFromColumn('\path\to\Entity\entityName', 'id', $em); 
    } 
    
    public static function getAllFromColumn($tableName, $columnName, $em) { 
        $q = $em->createQueryBuilder('t') 
        ->select("t.$columnName") 
        ->from($tableName, 't'); 
    
        $q = $q->getQuery(); 
    
        $result = $q->getResult(\Doctrine\ORM\Query::HYDRATE_SCALAR); 
    
        return $result; 
    } 
    

    그러나 이것은 배열 배열을 반환합니다. 즉, 첫 번째 이벤트의 ID는

    $result[0]['id'];