Doctrine 2.5:无法识别的字段(但仅限于Symfony的prod模式)

时间:2017-11-04 00:03:16

标签: symfony doctrine-orm doctrine

因此,我似乎受到仅影响Symfony中的生产模式而非开发者模式的问题的困扰。这次,我有一个ManyToOne关联,我试图只获取没有关联的实体(即它们在数据库中有一个NULL值)。这与我在dev移动中所期望的完全一样,但在prod模式下,Doctrine会抛出一个“无法识别的字段”异常......对于一个绝对存在的字段。

以下是相关实体的相关部分(Page.php):

<Popup x:Name="Popup">
    <Border x:Name="PopupBorder"
        Background="{ThemeResource ComboBoxDropDownBackground}"
        BorderBrush="{ThemeResource ComboBoxDropDownBorderBrush}"
        BorderThickness="{ThemeResource ComboBoxDropdownBorderThickness}"

这是来自控制器的相关行(PageController.php):

/**
 * @ORM\ManyToOne(targetEntity="Project", inversedBy="pages")
 * @ORM\JoinColumn(name="project_id", referencedColumnName="ID")
 */
protected $project;

同样,这完全可以使用app_dev.php(即开发模式),但使用app.php(即prod模式)我不断获得“无法识别的字段”异常。是什么给了什么?

更新:我向同一个实体添加了一个“权重”整数字段,并且该字段在$pages = $this->getDoctrine()->getRepository('JCScopingBundle:Page')->findBy(['project' => null]); 模式下也无法识别。这意味着我无法使用prod模式,这意味着我无法将更改上传到远程服务器。真的在这里泡菜...

2 个答案:

答案 0 :(得分:0)

在我的情况下,我忘了重新启动'memcached'服务。

检查metadata_cache_driver类型。就我而言:

doctrine:
    orm:
        metadata_cache_driver:
            type: memcached
            host: localhost
            port: 11211
            instance_class: Memcached

由于先前的元数据已缓存,因此在应用迁移后,doctrine会使用旧的缓存元数据,而不知道添加的新字段。

答案 1 :(得分:0)

嗯,低,看,重启Apache服务解决了这个问题。显然,这是真正清除APCu元数据缓存的唯一方法。基于这个问题/答案,我受到启发,尝试这个:Doctrine mapped field is not working