You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在YAML文件中定义继承FOS\UserBundle\Model\User的User实体?

解决FOSUserBundle YAML映射实体继承问题

我之前也踩过这个坑!FOSUserBundle的文档确实在YAML标签页没给出继承配置的示例,其实核心是要区分**映射超类(MappedSuperclass)**和普通实体继承的配置方式——FOS提供的User基类属于前者,不能用普通的inheritance键来配置。

正确的YAML ORM映射配置

直接在你的User实体映射文件中使用extends关键字,指定继承FOS基类的映射元数据:

# src/Entity/User.orm.yaml
App\Entity\User:
    type: entity
    table: fos_user
    # 关键:用extends指定继承FOS的映射超类
    extends: FOS\UserBundle\Model\User
    id:
        id:
            type: integer
            id: true
            generator:
                strategy: AUTO
    # 这里添加你的自定义字段(如果有的话)
    fields:
        nickname:
            type: string
            length: 64
            nullable: true

为什么之前的方法没用?

你之前尝试的inheritance键是Doctrine用来配置实体继承策略(比如单表继承、联合继承)的,而FOS的FOS\UserBundle\Model\User是一个MappedSuperclass——它本身不会被映射为数据库表,只是用来共享字段和映射配置,所以必须用extends来继承它的元数据。

配套的PHP实体代码

别忘了在PHP类里也继承基类,确保代码和映射配置一致:

// src/Entity/User.php
namespace App\Entity;

use FOS\UserBundle\Model\User as BaseUser;
use Doctrine\ORM\Mapping as ORM;

/**
 * @ORM\Entity
 * @ORM\Table(name="fos_user")
 */
class User extends BaseUser
{
    /**
     * @ORM\Id
     * @ORM\Column(type="integer")
     * @ORM\GeneratedValue(strategy="AUTO")
     */
    protected $id;

    // 自定义字段的属性
    private $nickname;

    // 自动生成getter和setter(可以用make:entity命令)
    public function getNickname(): ?string
    {
        return $this->nickname;
    }

    public function setNickname(?string $nickname): self
    {
        $this->nickname = $nickname;
        return $this;
    }
}

最后一步:更新实体和数据库

运行命令重新生成实体的getter/setter,确保继承的字段都被正确处理:

php bin/console make:entity --regenerate App\Entity\User

然后更新数据库结构:

php bin/console doctrine:schema:update --force
# 或者更推荐用迁移:
# php bin/console make:migration
# php bin/console doctrine:migrations:migrate

这样你的User实体就会继承FOSUserBundle所有默认字段(比如username、email、password等),同时可以添加自己的自定义字段啦!

内容的提问来源于stack exchange,提问作者Your Common Sense

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.19 07:48:42