Geçenlerde bir alışveriş sepeti sitenin siparişleri görüntülemek için yönetici araçları sağlamak, Zend Framework (1.8.4) ile başladım.
Ne yapmak istiyorum verimli tek bir veritabanı sonuç satırdan (Zend_Db_Table_Row_Abstract
) nesneler birden fazla modeli oluşturmaktır.
The relationship is simple:
an Order has one Customer (foreign key order_custid=customer.cust_id
);
a Customer has many Orders.
Emir yükleniyor yeterince kolaydır. Yöntem, burada belgelenmiştir kullanımı:
... Sonra her biri için müşteri kapmak olabilir.
foreach ($orderList as $o)
{
cust = $o->findParentRow('Customers');
print_r ($cust); // works as expected.
}
Eğer emir uzun bir liste yükleme bittiğinde - ama demek, 40 veya daha fazla, bir pageful - Bu acı yavaş.
Sonraki Bir JOIN çalıştı:
$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);
Bu bana emir nesneleri bir dizi verir. print_r($orders)
Bunların her biri ben ham alan adları Order_ * ve cust_ * ile korunan bir üyesi, bekliyoruz sütun listesi içerdiğini gösterir.
Ama nasıl bu al nesnelerin her birini bulmak cust_ * alanlarından Müşteri nesnesi oluşturmak için?
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.
}
Katıldı satırları aynı anda bir Sipariş ve Müşteri nesne oluşturmak için iyi bir yolu var mı? Veya bir çiğ sonuç kümesi olsun ve alanları tek-tek yeni oluşturulan nesnelerin içine her kopya, tablo geçidi olmadan sorguyu çalıştırmak gerekir?