Estoy usando Propel 1.6 y no estoy seguro de cómo obtener un objeto (dado su valor de atributo "id") de una colección de objetos de propel. No pude encontrar una respuesta directa en la documentación de Propel (PropelCollection methods no parece aplicable?). Por ejemplo: Digamos que tengo una tabla de "persona" con el siguiente esquema:Cómo obtener el objeto por "id" desde la colección de objetos de 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>
hago la siguiente consulta para obtener una colección de objetos "persona":
$persons = PersonQuery::create()->find();
Entonces, desea encontrar un objeto "Persona" con un "id" dado (por ejemplo, "Persona" con "id = 3"), sin hacer una nueva consulta a la base de datos. ¿Cómo puedo hacerlo?
$persons->get(...?)?
En otras palabras, NO quiero hacer:
$personX = PersonQuery::create()->findOneById(3);
Contexto:
me gustaría evitar hacer una consulta de base de datos para mejorar el rendimiento. La declaración debe ser insertado dentro de una instrucción foreach que de otro modo dar lugar a numerosas conexiones de bases de datos, como la siguiente:
foreach ($books as $book) {
$book['author_name'] = PersonQuery::create()->findOneById($book['author_id'])->getName();
}
Puede hacerlo de una forma más elegante con 'array_filter()' :-) – Florent
@ J0K: yo estaba tratando para evitar un ciclo foreach, pero supongo que, como sugieres, no puedo evitarlo. Creo que seguir con el bucle sería aún más eficiente que hacer conexiones de bases de datos múltiples. ¡Gracias por tu respuesta! – RayOnAir
@ Florent: no estoy seguro de cómo implementar la función [array_filter] (http://php.net/manual/en/function.array-filter.php) en este caso, pero investigaré ... ¡Gracias! – RayOnAir