【问题标题】:Symfony2 YAML Entity field not being boundSymfony2 YAML 实体字段未绑定
【发布时间】: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 来生成实体。我很惭愧,我以前没有尝试过。写一个实际的答案,我会代表你。

标签: php symfony doctrine


【解决方案1】:

您不应手动进行更改,而应让 ORM 驱动程序为您完成这些更改。使用这两个命令相应地更新实体和您的数据库:

php app/console doctrine:generate:entities Namespace:Card
php app/console doctrine:schema:update --force

【讨论】:

  • 我不知道为什么,但是手动构建我的实体时出现了一些故障。 YAML 文件和 Entity 类在实体生成器中看起来完全一样,但现在一切都被绑定了。如果任何人都可以扩展 Symfony2\doctrine2 生成实体的知识,那应该会很有帮助。我的意思是,它在 yaml 和实体之外生成什么?为什么它与 MANUAL 实体创建不同。
猜你喜欢
  • 2012-11-10
  • 1970-01-01
  • 2015-02-10
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-04-15
  • 1970-01-01
相关资源
最近更新 更多