Używam Propel 1.6 i nie jestem pewien, jak uzyskać obiekt (biorąc pod uwagę jego "id" wartość atrybutu) z kolekcji obiektu propel. Nie mogłem znaleźć prostej odpowiedzi w dokumentacji Propela (PropelCollection methods) nie wydaje się mieć zastosowania?). Na przykład: Powiedzmy mam „osoba” stół z następującym schematem:Jak zdobyć obiekt przez "id" z kolekcji obiektów propagandowych?
<table name="person">
<column name="id" type="INTEGER" primaryKey="true" autoIncrement="true" required="true"/>
<column name="name" type="VARCHAR" size="100" required="true"/>
</table>
zrobić następujące kwerendy, aby uzyskać kolekcji obiektów „osoba”:
$persons = PersonQuery::create()->find();
Potem chcesz znaleźć obiekt "Person" z podanym "id" (np. "Person" z "id = 3"), bez dodawania nowego zapytania do bazy danych. Jak mogę to zrobić?
$persons->get(...?)?
Innymi słowy, nie chcę zrobić:
$personX = PersonQuery::create()->findOneById(3);
kontekstu:
chciałbym uniknąć tworzenia zapytania do bazy danych w celu zwiększenia wydajności. Oświadczenie ma być wprowadzony wewnątrz foreach, które w przeciwnym razie prowadziłoby do licznych połączeń z bazą danych, jak następuje:
foreach ($books as $book) {
$book['author_name'] = PersonQuery::create()->findOneById($book['author_id'])->getName();
}
Można to zrobić w bardziej elegancki sposób z 'array_filter()' :-) – Florent
@ J0K: Starałam aby uniknąć pętli foreach, ale jak sądzę, nie mogę tego uniknąć. Myślę, że przejście z pętlą nadal byłoby bardziej wydajne niż wykonywanie wielu połączeń z bazą danych. Dzięki za odpowiedź! – RayOnAir
@Florent: Nie jestem pewien, jak zaimplementować funkcję [array_filter] (http://php.net/manual/en/function.array-filter.php) w tym przypadku, ale zbadam ... dzięki! – RayOnAir