Php 将对象视为与ORM和Symfony2形式一致的信条

Php 将对象视为与ORM和Symfony2形式一致的信条,php,symfony,doctrine-orm,doctrine,Php,Symfony,Doctrine Orm,Doctrine,因此,我在MySQL上映射了这个条令实体: Dende\Calendar\Domain\Calendar: type: entity table: calendars embedded: id: class: Dende\Calendar\Domain\Calendar\CalendarId columnPrefix: false fields: name: type: string nullable: fals

因此,我在MySQL上映射了这个条令实体:

Dende\Calendar\Domain\Calendar:
  type: entity
  table: calendars

  embedded:
    id:
      class: Dende\Calendar\Domain\Calendar\CalendarId
      columnPrefix: false

  fields:
    name:
      type: string
      nullable: false
      length: 255
嵌入类的映射定义如下所示:

Dende\Calendar\Domain\Calendar\CalendarId:
  type:   embeddable

  id:
    id:
      type: guid
      generator: { strategy: UUID }
$builder
            ->add("calendar", "entity", [
                "class" => "Dende\Calendar\Domain\Calendar",
                "choice_label" => "name",
                "placeholder" => "Choose calendar",
            ])
除了一件事,一切都很顺利。我在symfony表单的实体字段类型中使用“日历”实体。使用表单生成器将字段添加到表单中,如下所示:

Dende\Calendar\Domain\Calendar\CalendarId:
  type:   embeddable

  id:
    id:
      type: guid
      generator: { strategy: UUID }
$builder
            ->add("calendar", "entity", [
                "class" => "Dende\Calendar\Domain\Calendar",
                "choice_label" => "name",
                "placeholder" => "Choose calendar",
            ])
填写表单时显示ok,但提交表单后,我收到en异常,表示:

[语法错误]第0行,第106列:错误:应为 条令\ORM\Query\Lexer::T_CLOSE_括号,得到“.”

正如我在堆栈跟踪中发现的,有一个带有'id.id'参数的查询构建(这很有意义,因为Calendar->id()返回CalendarId,并且它还有id()方法),这会导致错误(之后,在解析时):

谁能帮帮我,在这种情况下怎么办?这是我的映射中的一些边缘理论或错误吗?除此之外的一切都很好

我使用symfony2.7和Doctrine2.6

编辑:

据我所知,生成的查询可能有问题:

SELECT e FROM Dende\Calendar\Domain\Calendar e WHERE e.id.id IN(:ORMQueryBuilderLoader_getEntitiesByIds_id.id)

也许这是身份证和上面的身份证之间的最后一点问题。当我使用app/console运行这个DQL查询时,我得到了相同的错误。将点更改为下划线后,只有太少的参数例外。

据我所知,不能将嵌入对象用作主键。这有点遗憾。您应该能够创建一个自定义类型,这可能有点麻烦,但应该以大致相同的方式工作。