Що таке гідратація доктрини? [зачинено]


90

Я читав про гідратацію в документації доктрини, але досі не можу зрозуміти, що це таке.

Хтось може пояснити?


Посилання на документацію Doctrine2, що пояснює ГІДРАЦІЮ: doctrine-project.org/docs/orm/2.0/en/reference/…
Dawid Ohia,

29
Не конструктивний? Це одна з найбільш фундаментальних концепцій для розуміння того, як працюють внутрішні органи Доктрини.
csvan

6
Я думаю, що це питання слід захищати, а не закривати.
Саймон

2
@Simon Згоден. Питання та прийнята відповідь популярні, чому б тоді не перевести його в захищений стан?
Денис Кулагін

Відповіді:


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 на результат запиту для кожного режиму гідратації - це найкращий спосіб побачити "як це працює?"
Крозін

4
лише невелика підказка. У 1.2 HYDRATE_SINGULAR_SCALARповертає невизначену постійну помилку. HYDRATE_SINGLE_SCALARправильно.
Дармен Аманбаєв

1
Як примітка Doctrine::HYDRATE_RECORDтепер відома якDoctrine::HYDRATE_OBJECT
Стів Таубер

1
Посилання на вищезазначену документацію зробить цю відповідь більш корисною.
Шон Бін

2
$q->fetchOne(array(), Doctrine_Core::HYDRATE_ARRAY);

Він поверне просто простий масив замість об’єкта збору вчень.

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.