[英]SonataUserBundle + FOSUserBundle Annotation Issue Doctrine Primary Key Error
使用Symfony 4.1,Sonata用戶捆綁包4.x和FOSUserBundle 2.1.2。
我試圖覆蓋用戶表和組表的表名。 因此,我在自動生成的用戶和組類中添加了注釋:
use Sonata\UserBundle\Entity\BaseGroup as BaseGroup;
use Doctrine\ORM\Mapping as ORM;
/**
* This file has been generated by the SonataEasyExtendsBundle.
* @ORM\Entity()
* @ORM\Table(name="aegis_group")
* @link https://sonata-project.org/easy-extends
* References:
* @link http://www.doctrine-project.org/projects/orm/2.0/docs/reference/working-with-objects/en
*/
class Group extends BaseGroup
{
/**
* @ORM\Id
* @var int $id
*/
protected $id;
/**
* Get id.
*
* @return int $id
*/
public function getId()
{
return $this->id;
}
}
然后,我修改了doctrine.yaml以將這些注釋包括在內:
mappings:
App:
is_bundle: false
type: annotation
dir: '%kernel.project_dir%/src/Entity'
prefix: 'App\Entity'
alias: App
FOSUserBundle: ~
ApplicationSonataUserBundle:
type: annotation
SonataUserBundle: ~
但是,當我運行遷移時,該學說給了我一個錯誤:
在MappingException.php第46行中:
沒有為“ Sonata \\ UserBundle \\ Entity \\ BaseGroup”的實體“ App \\ Application \\ Sonata \\ User Bundle \\ Entity \\ Group”子類指定標識符/主鍵。 每個實體必須具有一個標識符/主鍵。
如何解決此問題,以便可以使用自己的自定義表名? 我要做的就是更改數據庫表名稱,這不應該涉及到這一點。
首先,您在類中忘記了名稱空間。
第二:嘗試為主鍵添加策略和列,例如
/**
* @var int $id
* @ORM\Id
* @ORM\Column(type="integer")
* @ORM\GeneratedValue(strategy="AUTO")
*/
好吧,事實證明SonataEasyExtendsBundle在目錄Application \\ Sonata \\ UserBundle \\ Resources \\ config \\ doctrine文件夾中生成了一個XML orm文件。 應該修改此文件(User.orm.xml)以更改表配置。
<?xml version="1.0" encoding="UTF-8"?>
<doctrine-mapping xmlns="http://doctrine-project.org/schemas/orm/doctrine-mapping"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://doctrine-project.org/schemas/orm/doctrine-mapping
http://doctrine-project.org/schemas/orm/doctrine-mapping.xsd">
<entity name="App\Application\Sonata\UserBundle\Entity\User" table="aegis_user">
<id name="id" column="id" type="integer">
<generator strategy="AUTO" />
</id>
</entity>
</doctrine-mapping>
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.