简体   繁体   English

SonataUserBundle + FOSUserBundle批注问题原则主键错误

[英]SonataUserBundle + FOSUserBundle Annotation Issue Doctrine Primary Key Error

Using Symfony 4.1, Sonata User Bundle 4.x, and FOSUserBundle 2.1.2. 使用Symfony 4.1,Sonata用户捆绑包4.x和FOSUserBundle 2.1.2。

I am trying to override the table names for the User and Group tables. 我试图覆盖用户表和组表的表名。 I therefore added annotations to the auto generated user and group classes: 因此,我在自动生成的用户和组类中添加了注释:

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;
    }    
}

I then modified doctrine.yaml to factor in these annotations: 然后,我修改了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: ~   

However, when I run migrations, doctrine gives me an error: 但是,当我运行迁移时,该学说给了我一个错误:

In MappingException.php line 46: 在MappingException.php第46行中:

No identifier/primary key specified for Entity "App\\Application\\Sonata\\User Bundle\\Entity\\Group" sub class of "Sonata\\UserBundle\\Entity\\BaseGroup". 没有为“ Sonata \\ UserBundle \\ Entity \\ BaseGroup”的实体“ App \\ Application \\ Sonata \\ User Bundle \\ Entity \\ Group”子类指定标识符/主键。 Every Entity must have an identifier/primary key. 每个实体必须具有一个标识符/主键。

How to fix this issue, so that I can use my own custom table names ? 如何解决此问题,以便可以使用自己的自定义表名? All I want to do is to change the database table names, this should not be this involved. 我要做的就是更改数据库表名称,这不应该涉及到这一点。

First you forgot namespace in your class. 首先,您在类中忘记了名称空间。

Second: Try to add a strategy and a column for your primary key like 第二:尝试为主键添加策略和列,例如

/**
 * @var int $id
 * @ORM\Id
 * @ORM\Column(type="integer")
 * @ORM\GeneratedValue(strategy="AUTO")
 */

Well, turns out an XML orm file is generated by the SonataEasyExtendsBundle, in directory Application\\Sonata\\UserBundle\\Resources\\config\\doctrine folder. 好吧,事实证明SonataEasyExtendsBundle在目录Application \\ Sonata \\ UserBundle \\ Resources \\ config \\ doctrine文件夹中生成了一个XML orm文件。 One should modify this file (User.orm.xml) to make changes to the table config. 应该修改此文件(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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM