2012-11-09 10 views
5

Io non riesco a inchiodare la regola di pollice come a ciò che viene aggiunto a una matrice quando si utilizza toArray(), tanto che se dovessi fare qualcosa di simile:Quali sono le regole di quando la funzione propel's toArray() restituirà oggetti di riferimento o solo il livello superiore?

$sheep = SheepQuery::create()->find(); 
foreach ($sheep as $sheepii) { 
    $sheepii->getShepherd(); 
} 
return $sheep->toArray(); 

o qualche variazione di esso, a volte mi sembra di ottenere risultati con entrambe le colonne del tavolo ovino e i loro sotto-array con il pastore, ma a volte non sembra includerlo, quindi devo fare qualcosa come aggiungere i valori ad un nuovo array mentre mi avvicino.

Chiunque può segnalare (un link che spiega) il motivo per cui questo accade e le regole dietro di esso quindi non mi indovinare alla cieca, e se c'è un modo migliore di fare la stessa cosa di cui sopra con tutti i mezzi sono aperto a suggerimenti .

risposta

3

In genere, se si desidera che una relazione sia all'interno di toArray(), è necessario recuperarla o fare un join all'interno della query iniziale.

Ciò restituirà solo informazioni per gli oggetti Sheep:

$sheep = SheepQuery::create() 
    ->find(); 
$sheep->toArray(); 

Ciò restituirà informazioni per gli oggetti Sheepe la loro relazione con Shepherd se ce n'è uno:

$sheep = SheepQuery::create() 
    ->find() 
    ->joinWith('Shepherd'); 
$sheep->toArray(); 

Ed ecco un buon post sul blog su Getting To Know Propel 1.5: When You Really Need Arrays.

+0

Vale anche la pena menzionare '$ includeForeignObjects' del metodo' toArray() 'da quel collegamento (che di default è falso) - grazie – LeonardChallis

+0

A cattivo il collegamento non è più disponibile. – chaos0815

+0

Ho aggiornato il collegamento. – j0k

Problemi correlati