什么是主义水合?[关闭]


90

我已经在该学说的文档中阅读了有关水合作用的内容,但是我仍然不明白它是什么。

有人可以解释一下吗?



29
不是建设性的?这是理解教义内部原理的最基本概念之一。
csvan 2014年

6
我认为这个问题应该受到保护,而不是封闭。
西蒙(Simon)

2
@Simon同意。问题和公认的答案都很流行,那么为什么不将其移至保护状态呢?
Denis Kulagin '16

Answers:


92

水化是一种用于返回查询结果的方法。例如:

  1. 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'];
    }
  2. 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();
    }
  3. 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)

还有更多方法,您可以在文档中阅读每种方法。


好的..所以通常当我使用sql时,它返回一个mysql对象,我必须使用mysqli_fetch_assoc,然后由我自己对它们进行排序,依此类推...但是现在,所有这些都为我排序了。这就是水合作用,给我排序的对象/数组吗?
never_had_a_name

4
不,这与排序结果无关(请orderBy()处理此问题)。它与查询结果有关,它是一个标量值(HYDRATE_SINGULAR_SCALAR),一个数组还是一个嵌套数组代表每个数据库记录(HYDRATE_ARRAY)或对象集合()的数组HYDRATE_RECORD。是否在每种水合模式的查询结果中使用var_dump-这是查看“它是如何工作的”的最佳方法?
Crozin

4
只是一点提示。在1.2中HYDRATE_SINGULAR_SCALAR返回未定义的常量错误。HYDRATE_SINGLE_SCALAR是正确的。
达尔曼·阿曼巴耶夫

1
作为一个说明Doctrine::HYDRATE_RECORD,现在被称为Doctrine::HYDRATE_OBJECT
史蒂夫堡

1
指向上述文档的链接将使此答案更有帮助。
肖恩·宾恩

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.