我有这个方法:
public function getMonth ($month_name)
{
$q = $this->createQueryBuilder('m');
$q->select('m')
->where('m.name = :name')
->setParameter('name', $month_name);
return $q->getQuery()->getResult();
}
我希望从中找到一个月或0个月。我在我的控制器中以这种方式使用这个方法:
$month = $em->getRepository('EMExpensesBundle:Month')
->getMonth($this->findMonth());
$month->setSpended($item->getPrice());
我尝试了这个与getSingleResult()
和一切都是完美的,直到我遇到了一个案件时,没有一个月被发现,一切都失败了真的很糟糕!
然后我尝试使用getResult()
,但它返回一个数组,然后
$month->setSpended($item->getPrice());
被称为在非对象上调用并修复它,我应该在任何地方使用
$month[0]->setSpended($item->getPrice());
有没有一种更优雅的方法来实现这一点,而不必在任何地方添加不必要的[0]索引?
2条答案
按热度按时间n6lpvg4x1#
此外,在Doctrine 2.1中,您可以使用“getOneOrNullResult”
http://doctrine-orm.readthedocs.org/en/latest/reference/dql-doctrine-query-language.html#query-result-formats
6ss1mwsb2#
如果您使用
getSingleResult
,Doctrine会抛出一个\Doctrine\ORM\NoResultException
,您可以捕获并处理它。如果您想直接在Repository中捕获它,我建议:不要忘记添加一个
use Your\Namespace\Month;
,否则这将失败,因为它找不到Month类!当然,如果实体是新的,你也必须持久化它。你可以扩展catch块,看起来像这样:
你也可以在你的控制器中捕获异常,使它更透明,但是这取决于你的用例,最好是自己解决