symfony 3.1存储库方法混淆

时间:2016-08-23 10:23:38

标签: symfony

我有一个使用此方法的存储库:

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

2 个答案:

答案 0 :(得分:4)

您的查询返回一个包含对象的数组,因此,如果您希望只接收一个对象,则必须使用getOneOrNullResult更改查询

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

答案 1 :(得分:0)

在控制器中

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

返回一个对象Country。如果使用findBy,则返回带有对象的数组。