Doctrine hidrasyonu nedir? [kapalı]


90

Doktrinin belgelerinde hidrasyon hakkında bir şeyler okudum ama hala ne olduğunu anlayamıyorum.

Biri açıklayabilir mi lütfen?


HYDRATION'ı açıklayan Doctrine2 dokümantasyon referansı: doctrine-project.org/docs/orm/2.0/en/reference/…
Dawid Ohia

29
Yapıcı değil mi? Bu, Doktrin iç elemanlarının nasıl çalıştığını anlamak için en temel kavramlardan biridir.
csvan

6
Bence bu soru kapalı olmaktansa korunmalı.
Simon

2
@Simon Kabul ediyorum. Soru ve kabul edilen yanıt popüler, o zaman neden onu korumalı duruma taşımayasınız ?
Denis Kulagin

Yanıtlar:


92

Hidrasyon, sorgu sonuçlarını döndürmek için kullanılan bir yöntemdir. Örneğin:

  1. HYDRATE_ARRAY - Bu size başka bir dizi tarafından temsil edilen bir kayıt dizisi döndürür:

    $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- Bu size nesnelerin bir koleksiyonunu ( Doctrine_Collection ) döndürür :

    $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 - Sorgunun sonucunun ilk sütununun değerini döndürür:

     $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)
    

Birkaç yöntem daha var, her biri hakkında dokümantasyonda okuyabilirsiniz.


ok..so normal olarak sql kullandığımda bir mysql nesnesi döndürür ve mysqli_fetch_assoc kullanmalıyım, sonra bunları kendim sırala ve böyle devam ediyor ... ama şimdi hepsi benim için sıralandı. bana sıralı nesneler / diziler vererek hidrasyon bununla ilgili mi?
never_had_a_name

4
Hayır, bu sonucu sıralamakla ilgili değil (bunu orderBy()halledin). Yaklaşık olduğunu Ne sorgu sonucunu olacak tek bir skaler değer olup olmayacağı, ( HYDRATE_SINGULAR_SCALAR), iç içe diziler her veritabanı kaydı (temsil bir dizi veya diziler HYDRATE_ARRAY) ya da nesneler topluluğu ( HYDRATE_RECORD). Do var_dump her hidrasyon modu için sorgu sonucu - "nasıl çalıştığını" görmek için en iyi yoldur
Crozin

4
sadece küçük bir ipucu. 1.2'de HYDRATE_SINGULAR_SCALARtanımsız bir sabit hata döndürür. HYDRATE_SINGLE_SCALARdoğrudur.
Darmen Amanbayev

1
Bir not Doctrine::HYDRATE_RECORDolarak artık şu adla biliniyorDoctrine::HYDRATE_OBJECT
Steve Tauber

1
Yukarıda belirtilen belgelere bir bağlantı, bu yanıtı daha yararlı hale getirecektir.
Sean Bean

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

Bir doktrin toplama nesnesi yerine sadece basit bir dizi döndürecektir.

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.