use*_*187 3 doctrine-orm zend-framework2
我正在使用Zendframework 2的教义2
我试图返回一个对象,但不断收到此错误:
您的代理目录必须可写
这是我的查询:
$this->getEntityManager()
->getRepository('Messages\Entity\Messages')
->findOneBy(array('id' => 6,
'receiverId' => 16
));
Run Code Online (Sandbox Code Playgroud)
但是,同一查询返回的数组没有任何问题,重新:
$qb = $this->getEntityManager()->createQueryBuilder();
$qb->select(array('u'))
->from('Messages\Entity\Messages','u')
->where('u.id = :id')
->andWhere('u.receiverUserId = :receiverId')
->setParameter('receiverId',16)
->setParameter('id',(int)6);
$query = $qb->getQuery();
return $data = $query->getArrayResult();
Run Code Online (Sandbox Code Playgroud)
如果您使用的是Setup::createAnnotationMetadataConfiguration,只需通过以下方法进行修复
data/DoctrineORMModule/Proxychmod -R 755 data/DoctrineORMModule/Proxy在您的引导程序中,包括数据目录的路径,如下所示:
Setup::createAnnotationMetadataConfiguration(array(__DIR__ . "/src/models"), $this->isDevMode, "data/DoctrineORMModule/Proxy")
这为我解决了。
代理是简单的类,它扩展了您的实际实体,并由学说在内部使用,通过延迟加载实体来水合实体的关联。Doctrine 决定在不同情况下在运行时使用或不使用代理实例,这实际上取决于您的实体中的查询和关联。您可能想在官方文档中深入了解这个主题。
在您的情况下,学说试图为您的Messages实体生成代理类,但您的代理目录根本不可写,如错误输出所述。
这似乎是DoctineModule 的配置错误。(假设您正在使用DoctrineORMModule将 Doctrine 与 ZF2 集成)Doctrine 需要一个可写目录来放置生成的代理类。在ZF2看来,data应用程序根目录下的目录完全符合这个要求。
确保您的中存在以下行public/index.php:
chdir(dirname(__DIR__));
Run Code Online (Sandbox Code Playgroud)并尝试使用这样的配置:
<?php
/**
* module/Application/config/module.config.php
*/
return array(
'router' => array(
// ...
),
// ...
'doctrine' => array(
'driver' => array(
//...
),
/**
* Generating proxies on runtime and using array cache instead of apc(u)
* greatly reduces the performance. So, you may want to override
* this settings on production environment.
*/
'configuration' => array(
'orm_default' => array(
'metadata_cache' => 'array',
'query_cache' => 'array',
'result_cache' => 'array',
'hydration_cache' => 'array',
'generate_proxies' => true,
'proxy_dir' => 'data/DoctrineORMModule/Proxy',
'proxy_namespace' => 'DoctrineORMModule\Proxy',
),
),
)
);
Run Code Online (Sandbox Code Playgroud)