Tôi đang sử dụng Propel 1.6 và tôi không chắc chắn làm thế nào để có được một đối tượng (cho giá trị thuộc tính "id" của nó) từ một bộ sưu tập đối tượng propel. Tôi không thể tìm thấy câu trả lời thẳng trong tài liệu của Propel (PropelCollection methods dường như không áp dụng được?). Ví dụ: phép nói rằng tôi có một "Người" bảng với lược đồ sau:Cách lấy đối tượng bằng "id" từ bộ sưu tập đối tượng 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>
tôi làm các truy vấn sau đây để có được một bộ sưu tập của "Người" đối tượng:
$persons = PersonQuery::create()->find();
Sau đó, tôi muốn tìm đối tượng "Người" với "id" đã cho (ví dụ: "Người" có "id = 3"), mà không cần tạo truy vấn mới vào cơ sở dữ liệu. Tôi làm nó như thế nào?
$persons->get(...?)?
Nói cách khác, tôi không muốn làm:
$personX = PersonQuery::create()->findOneById(3);
Bối cảnh:
Tôi muốn để ngăn chặn thực hiện một truy vấn cơ sở dữ liệu để cải thiện hiệu suất. Câu lệnh sẽ được chèn vào bên trong một tuyên bố foreach mà nếu không sẽ dẫn đến nhiều kết nối cơ sở dữ liệu, như sau:
foreach ($books as $book) {
$book['author_name'] = PersonQuery::create()->findOneById($book['author_id'])->getName();
}
Bạn có thể làm điều đó trong một cách thanh lịch hơn với 'array_filter()' :-) – Florent
@ j0k: Tôi đã cố gắng để tránh một vòng lặp foreach, nhưng tôi đoán, như bạn đề nghị, tôi không thể tránh nó. Tôi nghĩ rằng đi với vòng lặp sẽ vẫn hiệu quả hơn việc tạo nhiều kết nối cơ sở dữ liệu. Cảm ơn câu trả lời của bạn! – RayOnAir
@Florent: Tôi không chắc chắn cách triển khai hàm [array_filter] (http://php.net/manual/en/function.array-filter.php) trong trường hợp này, nhưng tôi sẽ điều tra ... cảm ơn! – RayOnAir