在symfony2中调用非对象错误的成员函数setCode()

时间:2013-05-27 09:28:54

标签: php symfony doctrine-orm

我有像

这样的cotroller动作
public function updateAction()
    {
        $em = $this->getDoctrine()->getManager();
        $codesArray=array('AFGHANISTAN;AF','ÅLAND ISLANDS;AX','ALBANIA;AL');
        foreach ($codesArray as $detail)
        {
            $detailArray=explode(";",$detail);
            $country=$em->getRepository('TestBundle:Countries')
                          ->findOneBy(array('name'=>$detailArray[0]));
            $country->setCode($detailArray[1]);
        }
        $em->flush();
    }

显示错误

FatalErrorException: Error: Call to a member function setCode() on a non-object

但是当我替换

$country=$em->getRepository('TestBundle:Countries')
                          ->findOneBy(array('name'=>$detailArray[0]));

$country=$em->getRepository('TestBundle:Countries')
                              ->find('1');

表示它将更新第一条记录。请给我解决方案。

1 个答案:

答案 0 :(得分:0)

存储库(和实体)名称通常是单数。

如果您的实体类是国家/地区,则可以使用以下命令获取存储库:

 $country=$em->getRepository('TestBundle:Country')-> ...

我不知道您要做什么,但您可以从symfony2 Intl component获取这些国家/地区代码......

use Symfony\Component\Intl\Intl;

\Locale::setDefault('en');

$countries = Intl::getRegionBundle()->getCountryNames();
// => array('AF' => 'Afghanistan', ...)

$country = Intl::getRegionBundle()->getCountryName('GB');
// => 'United Kingdom'