【发布时间】:2014-08-08 15:06:09
【问题描述】:
我有一个关于 Symfony2 的项目。我应该说我不认为自己是 Symfony2 的大师。你可以说我是新手。
我的实体通过 YAML 绑定到数据库,并且在 php 中创建了一个不受注释绑定的实体类。
我有一个这样的实体:
Project/CoreBundle/Resources/config/doctrine/Card.orm.yml
Project/CoreBundle/Entity/Card.php
卡片 - 是一个仪表板元素,可以拖动以方便用户使用。
对应的 Card.orm.yml 和 Card.php 具有对应于 db 中的表的结构。我创建了这段代码并且运行良好。
问题:现在我尝试向表、orm 和实体添加更多字段,它们没有被 Symfony2/Doctrine2 查询选择(我已经在调试器中查找了它,甚至在查询中都没有找到新字段是已选中)。
更重要的是,我尝试添加任何字段并且它不会被绑定。在检索到的对象中,它始终为 NULL。我查看了这个实体的映射,这个字段正在映射。但是在选择查询中,它又不存在。我使用了清晰的缓存机制等等——没有用。我已经从 orm 和实体中删除了其他字段 - Doctrine2 会引发异常,但是当我删除此字段(它仍然存在于表中)并且工作相同时,只返回 null。
这是有效的:
$queryBuilder
->select(array('card','card.isSpecialCard'))
“isSpecialCard”字段是未绑定选择的字段,因此我必须从表中自定义选择它,然后通过选择加载它。此外,它被加载到另一个级别的数组中,在卡片对象旁边而不是在对象中,尽管该对象仍然具有该字段并且它具有如同被选中一样的值。
我正在使用 Symfony 2.1。
【问题讨论】:
-
你尝试过使用 php app/console 学说:generate:entities 命名空间:卡 php app/console 学说:schema:update --force
-
另外,如果你的实体结构有 .orm.yml 文件,你为什么说它不受注释约束。不应该有任何注释
-
"为什么说它不受注解约束。" => "不应该有注解"。这正是我这么说的原因:)
-
好的,我已经读过了,因为你们都已经设置好了。通常在更改实体 ORM 文件后,我使用上述命令并检查生成的代码是否符合我的需要,然后我更新我的架构。一切正常。
-
嗯,谢谢,我不知道它改变了什么——yaml 和 Card.php 是一样的,但现在它可以工作了。我用这个 - php app/console dictionary:generate:entities Namespace:Card 来生成实体。我很惭愧,我以前没有尝试过。写一个实际的答案,我会代表你。