Недавно я начал использовать Zend Framework (1.8.4), чтобы предоставить инструменты администратора для просмотра заказов сайта корзины покупок.Zend: два объекта, одна строка
Что я хотел бы сделать, так это эффективно создать несколько объектов модели() из единственной строки результатов базы данных.
Взаимоотношения просты: a Заказ имеет одного Заказчика (внешний ключ order_custid=customer.cust_id
); Клиент имеет много ордеров.
Загрузка заказов достаточно проста. Используя метод документированного здесь:
Modeling objects with multiple table relationships in Zend Framework
... Я мог бы захватить клиент для каждого.
foreach ($orderList as $o)
{
cust = $o->findParentRow('Customers');
print_r ($cust); // works as expected.
}
Но когда вы загружаете длинный список заказов - скажем, 40 или более, pageful - это мучительно медленно.
Далее я попробовал JOIN:
$custTable = new Customers();
$orderTable = new Orders();
$orderQuery = $orderTable->select()
->setIntegrityCheck(false) // allows joins
->from($orderTable)
->join('customers', 'cust_id=order_custid')
->where("order_status=?", 1); //incoming orders only.
$orders = $orderTable->fetchAll($orderQuery);
Это дает мне массив объектов порядка. print_r($orders)
показывает, что каждый из них содержит список столбцов, который я ожидаю в защищенном члене, с именами необработанных полей order_ * и cust_ *.
Но как создать объект Customer из полей cust_ *, которые я нахожу в каждом из объектов Order?
foreach ($orders as $o) {
$cols = $o->toArray();
print_r ($cols); // looks good, has cust_* fields...
$cust = new Customer(array('table' => 'Customer', 'data' => $cols));
// fails - $cust->id, $cust->firstname, etc are empty
$cust->setFromArray($cols);
// complains about unknown 'order_' fields.
}
Есть ли хороший способ создать заказ и объект-клиент одновременно из объединенных строк? Или я должен запустить запрос без табличного шлюза, получить исходный набор результатов и скопировать каждое из полей по одному на вновь созданные объекты?
Насколько я знаю, Zend_Db этого не делает. Меня тоже очень интересовало бы решение. – markus