教义对象是巨大的

时间:2011-09-23 20:18:15

标签: php doctrine

我是一个.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多行!我确信在某个地方有一个明显的开关,基本上说“只发出这样的数据”,但我在学说手册中找不到它。

思想?

4 个答案:

答案 0 :(得分:7)

在Doctrine2中,可以使用dump()方法:

\Doctrine\Common\Util\Debug::dump($var, $maxDepth)

它的工作类似于print_rvar_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_rvar_dump就不是一个好主意。实际上,如果你没有Xdebug之类的限制递归深度的东西,你将永远不会将输出提供给浏览器。

如果您真的担心内存消耗,请使用memory_get_usage功能检查水合前后的内存占用情况。