Silex和Doctrine - ORMException:未知实体命名空间别名[半修复]

时间:2014-09-15 07:04:51

标签: doctrine-orm doctrine silex

我正在尝试在使用silex构建的应用中使用Doctrine组件。我能够让它发挥作用 - 差不多。

我有“用户”实体和相应的存储库

做的时候

$app['em']->getRepository('Foo\Entity\User')->findAll()

按预期工作,但在尝试进行自定义查询时

      $this->getEntityManager()
                ->createQuery(
                'SELECT
                    u
                FROM 
                    Foo:User u
                WHERE c.id = :x'
                )
                ->setParameter('x',$in)
                ->getResult();

我得到了这个例外

ORMException: Unknown Entity namespace alias 'Foo'

请忽略我可以使用findById()findBy(array('id'=>$in))进行选择的问题,问题在于自定义查询

这是我的配置

$app['orm.em.options'] = array(
    'mappings' => array(
        array(
            'type' => 'annotation',
            'namespace' => 'Foo\Entity',     
            'alias' => 'core',
            'path' => '%app.path%/src/Foo/Entity',
            'use_simple_annotation_reader' => false,
        )
));

$config = Setup::createAnnotationMetadataConfiguration(array(__DIR__."/src/Foo/Entity"));
$params = $app['db.options'];
$app['em'] = EntityManager::create($params, $config);

经过一些研究可能的解决方案:

  • auto_mapping:true =>尝试过,没有成功
  • 注册namespace =>尝试过,不确定是否已经完成,所以可能是解决方案,请建议如何正确执行
  • 除此之外我还试图搜索类似'用法'的git repos,但没有得到它:(

更新

目前我在查询中使用以下行并且它可以正常工作

FROM 
InstaLikes\Entity\User u

2 个答案:

答案 0 :(得分:2)

创建自定义查询时,应使用完全命名空间,在这种情况下: FOO \实体\用户

答案 1 :(得分:0)

我假设你已经检查了你在映射选项中给出的别名?

$app['orm.em.options'] = array(
    'mappings' => array(
        array(
            'type' => 'annotation',
            'namespace' => 'Foo\Entity',     
            'alias' => 'core',
            'path' => '%app.path%/src/Foo/Entity',
            'use_simple_annotation_reader' => false,
        )
));

该别名选项不应设置为 Foo 吗?