Niedawno zacząłem używać Zend Framework (1.8.4), aby zapewnić narzędzia administracyjne do przeglądania zamówień na stronie koszyka.Zend: Dwa obiekty, jeden wiersz
Co chcę zrobić, to wydajnie utworzyć wiele obiektów modelu (Zend_Db_Table_Row_Abstract
) z jednego wiersza wyników w bazie danych.
Relacja jest prosta: Zamówienie ma jednego Klienta (klucz obcy order_custid=customer.cust_id
); Klient ma wiele Zamówień.
Ładowanie zamówień jest łatwe. Stosując metodę udokumentowany tutaj:
Modeling objects with multiple table relationships in Zend Framework
... Mógłbym wtedy złapać klienta dla każdego.
foreach ($orderList as $o)
{
cust = $o->findParentRow('Customers');
print_r ($cust); // works as expected.
}
Ale kiedy ładujesz długą listę zamówień - powiedzmy, 40 lub więcej, strona - jest to boleśnie powolne.
Następny Próbowałem 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);
To daje mi tablicę obiektów rzędu. print_r($orders)
pokazuje, że każdy z nich zawiera listę kolumn, której oczekuję, w chronionym pliku, od surowych nazw pól order_ * i cust_ *.
Ale jak utworzyć obiekt klienta z pól cust_ *, które znajduję w każdym z tych obiektów zamówienia?
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.
}
Czy istnieje jakiś dobry sposób na utworzenie zamówienia i obiektu klienta jednocześnie z połączonych wierszy? Czy muszę uruchomić kwerendę bez bramy tabeli, uzyskać surowy zestaw wyników i skopiować każde z pól jeden po drugim do nowo utworzonych obiektów?
Z tego co wiem, Zend_Db tego nie robi. Byłbym też bardzo zainteresowany rozwiązaniem. – markus