我使用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
答案 0 :(得分:2)
Doctrine中没有RuleId
注释,只有Id
[see docs]。
只需在您定义的主键字段所有实体上使用@ORM\Id
。
答案 1 :(得分:0)
@ORM\Id
只是学说映射中主键字段的注释,它与MySql表中主键的列名无关。您可以为主键字段保留任何名称,并在映射时将其指定为@ORM\Column(name="column_name", type="integer")
。