Symfony Doctrine - ManyToOne关系中的Id长度

时间:2018-04-23 10:18:12

标签: php symfony doctrine-orm

当我执行'doctrine:migrations:diff'时,Symfony不会'导出'字段长度,而是'255'代替'doctrine:migrations:migrate'不起作用。

我的两个实体ORM定义:

App\Resources\Domain\Stage:
type: entity
fields:
    id:
        type: stage_id
        id: true
        length: 36
    name:
        type: string
manyToOne:
    educationalAreaId:
        targetEntity: EducationalArea
        joinColumn:
            name: educationalAreaId
            referencedColumnName: id

App\Resources\Domain\EducationalArea:
type: entity
fields:
    id:
        type: educational_area_id
        id: true
        length: 36
    name:
        type: string

我试图在manyToOne定义中设置'length'属性但没有成功。

(我在Ids中使用字符串类型,因为我生成UUID)

1 个答案:

答案 0 :(得分:0)

IMO学说注释是映射实体的更方便的方法,但无论如何我认为你的字段类型有问题。 type属性定义了用于数据库中列的映射类型,因此应该是stringintegerjson_array etc.

根据Doctrine文档,通常id字段与其他字段分开定义:

App\Resources\Domain\Stage:
  type: entity
  table: products
  id:
    id:
      type: integer
      generator:
        strategy: AUTO
  fields:
    name:
      type: string
manyToOne:
    educationalAreaId:
        targetEntity: EducationalArea
        joinColumn:
            name: educationalAreaId
            referencedColumnName: id

正如它在文档中所说:"它有一个嵌套在其中的生成器标记,它指定主键生成机制应该自动使用数据库平台的本机id生成策略"。

但你可以找到其他策略here

所以你可以试试这个:

App\Resources\Domain\Stage:
  type: entity
  table: products
  id:
    id:
      type: string
      length: 36
      generator:
        strategy: UUID
...

在我的情况下,我使用注释,它工作正常:

/**
 * @var string
 * @ORM\Column(name="id", type="string", length=36, options={"fixed":true})
 * @ORM\Id
 * @ORM\GeneratedValue(strategy="UUID")
 */
private $id;