Sto usando Propel 1.6 e non sono sicuro di come ottenere un oggetto (dato il suo valore di attributo "id") da una collezione di oggetti propel. Non sono riuscito a trovare una risposta diretta nella documentazione di Propel (PropelCollection methods non sembra applicabile?). Per esempio: Diciamo che ho una tabella "Persona" con il seguente schema:Come ottenere oggetto con "id" dalla collezione di oggetti propel?
<table name="person">
<column name="id" type="INTEGER" primaryKey="true" autoIncrement="true" required="true"/>
<column name="name" type="VARCHAR" size="100" required="true"/>
</table>
devo fare la seguente query per ottenere una collezione di oggetti "persona":
$persons = PersonQuery::create()->find();
Poi, ho desidera trovare un oggetto "Persona" con un determinato "id" (ad es. "Persona" con "id = 3"), senza creare una nuova query nel database. Come posso farlo?
$persons->get(...?)?
In altre parole, io non voglio fare:
$personX = PersonQuery::create()->findOneById(3);
Contesto:
Vorrei evitare che facendo una query di database per migliorare le prestazioni. La dichiarazione deve essere inserito all'interno di una dichiarazione foreach che altrimenti porterebbe a numerose connessioni al database, come il seguente:
foreach ($books as $book) {
$book['author_name'] = PersonQuery::create()->findOneById($book['author_id'])->getName();
}
Puoi farlo in un modo più elegante con 'array_filter()' :-) – Florent
@ J0K: stavo cercando per evitare un ciclo di foreach, ma suppongo, come suggerisci, che non posso evitarlo. Penso che andare con il ciclo sarebbe ancora più efficiente di fare più connessioni al database. Grazie per la tua risposta! – RayOnAir
@Florent: non sono sicuro di come implementare la funzione [array_filter] (http://php.net/manual/en/function.array-filter.php) in questo caso, ma indagherò su ... Grazie! – RayOnAir