所以,我将这个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: false
length: 255
嵌入式类的映射定义如下所示:
Dende\Calendar\Domain\Calendar\CalendarId:
type: embeddable
id:
id:
type: guid
generator: { strategy: UUID }
除了一件事,一切顺利。我使用"日历" symfony表单的实体字段类型中的实体。使用表单构建器添加字段,如下所示:
$builder
->add("calendar", "entity", [
"class" => "Dende\Calendar\Domain\Calendar",
"choice_label" => "name",
"placeholder" => "Choose calendar",
])
填写表格时显示确定,但提交后我收到例外说:
[语法错误]第0行,第106行:错误:预期 Doctrine \ ORM \ Query \ Lexer :: T_CLOSE_PARENTHESIS,得到了'。'
正如我在堆栈跟踪中发现的那样,使用' id.id'进行查询构建。参数(这是有道理的,因为Calendar-> id()返回CalendarId并且它还有id()方法)并且导致错误(之后,在解析时):
ORMQueryBuilderLoader ->getEntitiesByIds ('id.id', array('calendar_5629f2d738efc'))
任何人都可以帮助我,在这种情况下该怎么办?这是我的映射中的一些理论或错误的边缘情况吗?除此之外的一切都很好。
我使用Symfony 2.7和Doctrine2.6
编辑:
据我所知,生成的查询可能存在问题:
SELECT e FROM Dende\Calendar\Domain\Calendar e WHERE e.id.id IN(:ORMQueryBuilderLoader_getEntitiesByIds_id.id)
并且可能是上面的id和id之间的最后一个点的问题。当我使用app / console运行此DQL查询时,我得到相同的错误。将点更改为下划线后,只有极少数参数例外。