2010-04-18 10 views
83

Czytałem o hydratacji w dokumentacji doktryny, ale nadal nie mogę zrozumieć, co to jest.Co to jest nawodnienie Doctrine?

Czy ktoś mógłby wyjaśnić?

+24

Nie konstruktywny? Jest to jeden z najbardziej podstawowych pojęć służących do zrozumienia działania wewnętrznych elementów Doctrine. – csvan

+5

Myślę, że to pytanie powinno być chronione, a nie zamknięte. – Simon

+1

@Simon Zgadzam się. Pytanie i zaakceptowana odpowiedź są popularne, więc dlaczego nie przenieść go do stanu _protected_? –

Odpowiedz

87

Hydration to metoda używana do zwracania wyników zapytania. Na przykład:

  1. HYDRATE_ARRAY - To będzie powrót tablicę rekordów, które są reprezentowane przez innego tablicy:

    $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 - To wróci ci Kolekcja (Doctrine_Collection) przedmiotów:

    $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 - Zwróci wartość pierwszej kolumny zapytania r esult:

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

Jest jeszcze kilka sposobów, można przeczytać o sobie w dokumentacji.

+0

ok..tak normalnie, gdy używam sql, zwraca obiekt mysql i muszę użyć mysqli_fetch_assoc, a następnie posortować je samemu i tak dalej ... ale teraz wszystko jest dla mnie posortowane. na czym polega nawodnienie, dając mi posortowane przedmioty/tablice? –

+4

Nie, nie chodzi o wynik sortowania (poradzę sobie z tym 'orderBy()'). Chodzi o * Jaki będzie wynik twojego zapytania *, czy będzie to pojedyncza wartość skalarna ('HYDRATE_SINGULAR_SCALAR'), tablica lub tablice, w których zagnieżdżone tablice reprezentują każdy rekord bazy danych (' HYDRATE_ARRAY') lub zbiór obiektów ('HYDRATE_RECORD'). Czy [var_dump] (http://pl.php.net/manual/en/function.var-dump.php) na wynik kwerendy dla każdego trybu nawodnienia - to jest najlepszy sposób, aby zobaczyć "jak to działa?" – Crozin

+0

aha .. myślę, że rozumiem. więc chodzi o to, w jakiej formie chcę, aby wynik był: wartość skalarna, tablice lub obiekty? to brzmi jak bardzo fajna funkcja. niż nie muszę ich sam konwertować z mysqli_object :) –

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

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