symfony2 doctrine annotation [语义错误]

时间:2012-09-04 17:20:47

标签: php symfony annotations doctrine-orm

我使用symfony2和doctrine,我收到以下错误:

  

[语义错误]属性Wibiya \ WebsiteBundle \ Entity \ Rules :: $ RuleId中的注释“@Doctrine \ ORM \ Mapping \ RuleId”不存在,或者无法自动加载。

Rules实体包含其中的列/字段。

    /**
     * @var integer $RuleId
     * @ORM\RuleId
     * @ORM\Column(name="RuleId", type="integer")
     * @ORM\GeneratedValue(strategy="AUTO")
     */
    private $RuleId;

这是我试图运行的功能:

$em = $this->getDoctrine()->getEntityManager();
$Rules = $em->getRepository('WibiyaWebsiteBundle:Rules')->findAllOrderedByName();

RulesRepository类:

    public function findAllOrderedByName()
    {
        return $this->getEntityManager()
            ->createQuery('SELECT p FROM WibiyaWebsiteBundle:Rules p ORDER BY p.RuleName ASC')
            ->getResult();
    }

我试图将此行放在autoload.php

的底部
require __DIR__ . "/../vendor/doctrine/lib/Doctrine/ORM/Mapping/Driver/AnnotationDriver.php";

但是,我得到了同样的错误 我正在使用Symfony 2.0.16和Doctrine 2.1.6

2 个答案:

答案 0 :(得分:2)

Doctrine中没有RuleId注释,只有Id [see docs]。

只需在您定义的主键字段所有实体上使用@ORM\Id

答案 1 :(得分:0)

@ORM\Id只是学说映射中主键字段的注释,它与MySql表中主键的列名无关。您可以为主键字段保留任何名称,并在映射时将其指定为@ORM\Column(name="column_name", type="integer")