什么是 Doctrine 水合作用? [关闭]
Posted
技术标签:
【中文标题】什么是 Doctrine 水合作用? [关闭]【英文标题】:What is Doctrine hydration? [closed] 【发布时间】:2011-02-09 08:16:34 【问题描述】:我在学说的文档中阅读了有关水合作用的内容,但我仍然无法理解它是什么。
谁能解释一下?
【问题讨论】:
Doctrine2 文档参考解释了 HYDRATION:doctrine-project.org/docs/orm/2.0/en/reference/… 没有建设性?这是了解 Doctrine 内部如何运作的最基本概念之一。 我认为这个问题应该受到保护而不是关闭。 @Simon 同意。问题和接受的答案都很受欢迎,为什么不把它移到 protected 状态呢? 【参考方案1】:$q->fetchOne(array(), Doctrine_Core::HYDRATE_ARRAY);
它将只返回一个简单的数组,而不是一个学说集合对象。
【讨论】:
【参考方案2】:Hydration 是一种用于返回查询结果的方法。例如:
HYDRATE_ARRAY
- 这将返回一个由另一个数组表示的记录数组:
$q = Doctrine_Query::create()
->from('Post p')
->setHydrationMode(Doctrine::HYDRATE_ARRAY);
$resultSet = $q->execute(); // $resultSet is an array
foreach ($resultSet as $post)
// $post is an array
echo $post['title'];
HYDRATE_RECORD
- 这将返回一个对象集合 (Doctrine_Collection):
$q = Doctrine_Query::create()
->from('Post p')
->setHydrationMode(Doctrine::HYDRATE_RECORD); // Unnecessary, HYDATE_RECORD is default method
$resultSet = $q->execute(); // $resultSet is an Doctrine_Collection object
foreach ($resultSet as $post)
// $post is an Post object
echo $post->getTitle();
echo $post['title']; // Each Doctrine's Model object implements ArrayAccess interface so this is possible
echo $post->myCustomMethod();
HYDRATE_SINGULAR_SCALAR
- 将返回查询结果第一列的值:
$q = Doctrine_Query::create()
->select('p.created_at')
->from('Post p')
->where('p.id = ?', 321)
->setHydrationMode(Doctrine::HYDRATE_SINGULAR_SCALAR);
$createdAt = $q->execute(); // $createdAt has value of first column from first record from result set (eg.: 2008-04-06 21:22:35)
还有更多方法,您可以在文档中阅读每个方法。
【讨论】:
ok..所以通常当我使用 sql 时它会返回一个 mysql 对象,我必须使用 mysqli_fetch_assoc,然后自己对它们进行排序等等......但现在它已经为我排序了。这就是水合作用,给我排序的对象/数组? 不,这与排序结果无关(orderBy()
处理此问题)。它是关于您的查询结果是什么,它是单个标量值 (HYDRATE_SINGULAR_SCALAR
)、嵌套数组表示每个数据库记录 (HYDRATE_ARRAY
) 的数组还是数组的集合对象 (HYDRATE_RECORD
)。对每种补水模式的查询结果执行var_dump - 这是查看“它是如何工作的?”的最佳方式
只是一个小提示。在 1.2 中,HYDRATE_SINGULAR_SCALAR
返回未定义的常量错误。 HYDRATE_SINGLE_SCALAR
是对的。
作为注释Doctrine::HYDRATE_RECORD
现在称为Doctrine::HYDRATE_OBJECT
上述文档的链接将使这个答案更有帮助。以上是关于什么是 Doctrine 水合作用? [关闭]的主要内容,如果未能解决你的问题,请参考以下文章
Doctrine + Oracle = 超出最大打开游标 (ORA-01000)