2010-04-18 13 views
83

Doktrinin belgelerinde hidrasyon hakkında okudum ama hala ne olduğunu anlayamıyorum.Doktrin hidrasyonu nedir?

Birisi lütfen açıklayabilir misiniz?

+24

değil yapıcı? Bu, Doktrin içsellerinin nasıl çalıştığını anlamak için en temel kavramlardan biridir. – csvan

+5

Bu sorunun kapalı olmaktan çok korunması gerektiğini düşünüyorum. – Simon

+1

@Simon Katılıyorum. Soru ve kabul edilen cevap her ikisi de popülerdir, o zaman neden onu _protected_ durumuna taşımayın? –

cevap

87

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

  1. HYDRATE_ARRAY Bu, başka dizide temsil edilir kayıtların bir dizi 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 koleksiyonu (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 ilk sütununun değerini döndürür r esult: birkaç yöntemler vardı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) 
    

, yaklaşık her belgelerinde okuyabilir.

+0

ok..so normalde sql kullandığımda bir mysql nesnesi döndürür ve mysqli_fetch_assoc kullanmalıyım, sonra bunları kendim sıraladım ... ama şimdi hepsi benim için. hidrasyonun neyle ilgili olduğu, bana sıralanmış nesneler/diziler veren nedir? –

+4

Hayır, sonucu sıralamakla ilgili değil ('orderBy()' bu işlemi ele al). Bu nedir * Sorgu sonucunuz ne olacak *, tek bir skaler de (ger mi ('HYDRATE_SINGULAR_SCALAR'), iç içe dizilerin her veritabanı kayd (n ((HYDRATE_ARRAY') veya nesne koleksiyonunu (HYDRATE_RECORD') temsil ettiği bir dizi veya diziler mi?). Her hidrasyon modu için sorgu sonucu [var_dump] (http://pl.php.net/manual/en/function.var-dump.php) yapın - bu, "nasıl çalışır?" I görmenin en iyi yoludur. – Crozin

+0

aha..i şimdi anladığımı düşünüyorum. Yani sonuç hangi formda olmasını istiyorum: skaler değer, diziler veya nesneler? Bu çok hoş bir özellik gibi geliyor. onları mysqli_object :) –

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

It will return just a simple array instead of a doctrine collection object.