我是一个.NET转换为PHP,到目前为止过渡时间很开心。我正在使用doctrine 1.2作为我的ORM并让我的模型工作,一切都很好。但是,我现在看的问题是输出对象是巨大的。我有一个名为USERS的相当简单的表 - 它可能有8列和FK到4或5个其他表。我正在使用下面的代码来保护我的USERS对象:
$q = Doctrine_Query::create()
->select('u.*')
->from('USERS u')
->where('u.VANITY_URL = ?',$Url_Frag);
$users = $q->execute();
print_r($users);
我看到物体含水量与我的数据,所以这是好的。然而,它也伴随着一堆我显然不需要的元数据。总的来说,该对象超过5000多行!我确信在某个地方有一个明显的开关,基本上说“只发出这样的数据”,但我在学说手册中找不到它。
思想?
答案 0 :(得分:7)
在Doctrine2中,可以使用dump()
方法:
\Doctrine\Common\Util\Debug::dump($var, $maxDepth)
它的工作类似于print_r
和var_dump
,但会隐藏所有与Doctrine相关的数据。
也许Doctrine 1.x有类似内容?
答案 1 :(得分:6)
Doctrine 1.2实体对象和集合有一个名为“toArray”的方法。 所以你可以这样做:
print_r($users->toArray());
答案 2 :(得分:1)
您有几种选择。一个是转向doctrine2:它有光滑的模型,没有任何教条的魔力。
第二个是改变你的保湿模式。如果不改变doctrine_record逻辑,你无法真正调整对象的学说模型或肥胖。所以这可能有用:
$q = Doctrine_Query::create()
->select('u.*')
->from('USERS u')
->where('u.VANITY_URL = ?',$Url_Frag)
->setHydrationMode(Doctrine::HYDRATE_ARRAY);
$users = $q->execute();
打印这些对象会很紧张,因为在教条类网络中有许多嵌套对象(有些对象中有一些“神复杂”)。
可在此处找到更多文档:http://www.doctrine-project.org/documentation/manual/1_2/pl/data-hydrators:core-hydration-methods
答案 3 :(得分:1)
如果我没有误会,Doctrine1.2
实体中有一些圈子引用,那么print_r
或var_dump
就不是一个好主意。实际上,如果你没有Xdebug
之类的限制递归深度的东西,你将永远不会将输出提供给浏览器。
如果您真的担心内存消耗,请使用memory_get_usage
功能检查水合前后的内存占用情况。