2016-08-23 11 views
1

が、私はこの方法でリポジトリいる:symfonyの3.1リポジトリ方式の混乱

public function getCountryId($code_2a) 
{ 
    return $this 
     ->createQueryBuilder('e') 
     ->andWhere('e.code2a = :code_2a') 
     ->setParameter('code_2a', $code_2a) 
     ->getQuery() 
     ->execute(); 
} 

と、この呼び出しとコントローラ:私は$の国で

$country = $em->getRepository('AppBundle:Countries')->getCountryId('GB'); 

を理解するとして、私はと実体を持つことになりますこの場合のテーブル「英国」のレコードのデータ。

しかし、私が行うコントローラであれば:

$country_id = $country->getId(); 

私は例外を取得:

Error: Call to a member function getId() on array 

をそして、これは私が混乱。国の$idはどうすれば入手できますか?

答えて

4

あなたのクエリオブジェクト(複数可)を含む配列を返すので、あなたがコントローラでgetOneOrNullResult

public function getCountryId($code_2a) 
{ 
    return $this 
     ->createQueryBuilder('e') 
     ->andWhere('e.code2a = :code_2a') 
     ->setParameter('code_2a', $code_2a) 
     ->getQuery() 
     ->getOneOrNullResult() 
    ; 
} 
0

を使用して、クエリを変更する必要が1つのオブジェクトのみを受け取るために期待している場合

$country = $em->getRepository('AppBundle:Countries')->findOneByCode2a('GB'); 
if($country) { 
    $country_id = $country->getId(); 
} 

オブジェクトを1つ返します。 findByを使用する場合、配列をオブジェクトとともに返します。

+0

ありがとうございます。両方のメッセージが私を助けました。 – Carlos