Php Doctrine MongoDB ODM加载参考文档
我的szenario详细介绍,iv'e有一个用户文档:Php Doctrine MongoDB ODM加载参考文档,php,mongodb,doctrine-orm,doctrine,Php,Mongodb,Doctrine Orm,Doctrine,我的szenario详细介绍,iv'e有一个用户文档: /** @Document(collection="user") */ class User { /** @Id */ private $id; /** @ReferenceMany(targetDocument="Pet") */ private $pet; public function getPet() { return $this->pet; } }
/** @Document(collection="user") */
class User
{
/** @Id */
private $id;
/** @ReferenceMany(targetDocument="Pet") */
private $pet;
public function getPet()
{
return $this->pet;
}
}
我有一份宠物文件:
/** @Document(collection="pet") */
class Pet
{
/** @Id */
private $id;
/** @ReferenceMany(targetDocument="User") */
private $user;
public function getUser()
{
return $this->user;
}
}
多对多关联。如果我为现有文档调用以下代码
$result = $this->_dbContainer->getDocumentManager()->getRepository('User')->findBy(array('id' => => 'XZTZHJ323LKFHGJKLHGFGHJK'));
print_r($result->toArray());
…它以一个无休止的循环结束。错误消息:
PHP Fatal error: Allowed memory size of 134217728 bytes exhausted (tried to allocate 112721921 bytes) in ...
如果我执行以下代码:
var_dump($result->count());
var_dump($result->current());
结果是1/它存在(一切正常)。$result->current()的var_转储为空。getMongoData方法返回以下数据(正确):
如果我执行以下代码:
var_dump($result->count());
var_dump($result->current());
结果是布尔值(false)
有什么想法吗?前提是您的模型看起来像这样
/**
* @Document
*/
class User
{
/** @Id */
private $id;
/** @ReferenceMany(targetDocument="Something") */
private $somethings;
public function __construct()
{
$this->somethings = new \Doctrine\Common\Collections\ArrayCollection;
}
public function getSomethings()
{
return $this->somethings;
}
}
您应该能够使用
$user = $dm->find('User', $id);
$somethings = $user->getSomethings();
$firstSomething = $somethings->current(); // will return false if empty, can also use first()
foreach ($somethings as $something) {
// and so on
}
不要试图
var\u dump()
或打印模型代理对象。它们包含许多递归引用,如果试图将它们呈现为输出,则会耗尽可用内存。从引用的集合中获取单个对象的解决方案:
$pets = $this->user->getPets();
if(!is_null($pets) && $pets->count() > 0) {
$this->pet = $pets->first();
}
最大的收获(感谢@Phil):
不要尝试使用var_dump()或
打印模型代理对象。
这些函数包含许多递归函数
引用,您将耗尽您的精力
试图渲染的可用内存
将它们作为输出
致以最良好的祝愿,
Stephan尝试重新生成Hydrotor类。很抱歉,它对我不起作用,我的属性有以下注释(与您的示例相同的文档结构)/***@ReferenceMany(targetDocument=“ExampleReferenceDocument”)*/-结果迭代器->count()显示“1”(它得到了一个结果)但是如果我想用电流得到它,我只得到空值?理论层有一些问题。。。如果我在PersistentCollection结果中调用toArray()方法,脚本将终止,并在错误日志中发现以下消息:PHP致命错误:允许的内存大小已耗尽。。。插入到数据库中没有任何问题,该死。@Stephan我已经更新了我的答案,将其更改为ReferenceMany
模型,并添加了更多信息,特别是关于var\u dump()
首先,非常感谢Phil的支持!)不幸的是,更改并没有成功结束,我忘记在构造函数中初始化ArrayCollection,但是$pet->current()的结果为false,同时$pet->count()返回1-一个pet也存在于数据库中,具有正确的引用。。。我很高兴有其他建议!对于转储,我建议执行\Doctrine\Common\Util\Debug::dump($variable)
这有助于转储Doctrine对象,以便在读取之前执行