मैंने हाल ही में एक शॉपिंग कार्ट साइट के ऑर्डर देखने के लिए व्यवस्थापक टूल प्रदान करने के लिए ज़ेंड फ्रेमवर्क (1.8.4) का उपयोग करना शुरू कर दिया है।ज़ेंड: दो ऑब्जेक्ट्स, एक पंक्ति
मैं एक डेटाबेस परिणाम पंक्ति से कई मॉडल (Zend_Db_Table_Row_Abstract
) ऑब्जेक्ट्स कुशलतापूर्वक बनाने के लिए करना चाहता हूं।
संबंध सरल है: एक आदेश में एक ग्राहक है (विदेशी कुंजी 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 या अधिक, एक पेजफुल - यह दर्दनाक रूप से धीमा है।
अगला मैंने कोशिश की एक में शामिल हों:
$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)
दिखाता है कि उनमें से प्रत्येक में एक संरक्षित सदस्य में, कॉलम सूची शामिल है, कच्चे फ़ील्ड नाम ऑर्डर_ * और cust_ * के साथ।
लेकिन cust_ * फ़ील्ड से ग्राहक ऑब्जेक्ट कैसे बनाएं, जो मुझे उन ऑर्डर ऑब्जेक्ट्स में मिलता है?
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