इसके लिए थोड़ा सा संदर्भ। मैं अधिक कॉलम रखने के लिए बिक्री आदेश निर्यात फ़ंक्शन (ग्रिड के माध्यम से) का विस्तार करना चाहता हूं। मैंने एक मॉड्यूल बनाया है जो निर्यात के लिए एक नया ग्रिड जोड़ता है और एक नया संग्रह मॉडल भी है जो मूल का विस्तार करता है। यह _beforeLoad () फ़ंक्शन का उपयोग करता है ताकि मैं उन तालिकाओं में शामिल हो सकूं जिनकी मुझे आवश्यकता है।
मुझे जो परेशानी हो रही है वह यह है कि जब ग्रिड से फ़िल्टर जोड़े जाते हैं (increment_id, ऑर्डर की तारीख आदि), तो यह जो खंड जोड़ता है वह तालिका में उपसर्ग नहीं करता है और मुझे अस्पष्ट कॉलम नामों के साथ समस्या हो रही है। उदाहरण के लिए, increment_id पर मैं इस मुद्दे को क्लॉज़ में रख रहा हूँ:
SELECT `main_table`.*, `sales`.`total_qty_ordered`, `sales`.`entity_id` AS `order_id`, `sagepay`.`vendor_tx_code` FROM `sales_flat_order_grid` AS `main_table`
LEFT JOIN `sales_flat_order` AS `sales` ON main_table.increment_id = sales.increment_id
LEFT JOIN `sagepaysuite_transaction` AS `sagepay` ON order_id = sagepay.order_id WHERE (increment_id LIKE '%100000261%') GROUP BY `main_table`.`entity_id`
जहां मैं _addColumnFilterToCollection () फ़ंक्शन में अन्य तालिकाओं में शामिल होने से पहले यह खंड जोड़ा जाता है
protected function _addColumnFilterToCollection($column)
{
if ($this->getCollection()) {
$field = ( $column->getFilterIndex() ) ? $column->getFilterIndex() : $column->getIndex();
if ($column->getFilterConditionCallback()) {
call_user_func($column->getFilterConditionCallback(), $this->getCollection(), $column);
} else {
$cond = $column->getFilter()->getCondition();
if ($field && isset($cond)) {
// Filter added at this point
$this->getCollection()->addFieldToFilter($field , $cond);
}
}
}
return $this;
}
एक संक्षिप्त परीक्षण के रूप में, मैंने रेखा को बदल दिया
$this->getCollection()->addFieldToFilter('main_table.' . $field , $cond);
और यह काम किया है, लेकिन यह इसे करने के लिए एक शानदार तरीका महसूस नहीं करता है।
_BeforeLoad () में मेरा कोड है
protected function _beforeLoad()
{
// Join the sales_flat_order table to get order_id and and total_qty_ordered
$this->getSelect()->joinLeft(array('sales' => $this->getTable('sales/order')),
'main_table.increment_id = sales.increment_id',
array('total_qty_ordered' => 'sales.total_qty_ordered',
'order_id' => 'sales.entity_id'));
// Join the SagePay transaction table to get vendor_tx_code
$this->getSelect()->joinLeft(array('sagepay' => $this->getTable('sagepaysuite2/sagepaysuite_transaction')),
'order_id = sagepay.order_id',
array('vendor_tx_code' => 'vendor_tx_code'));
$this->getSelect()->group('main_table.entity_id');
parent::_beforeLoad();
}
मुझे विक्रय आदेश ग्रिड तालिका और SagePay लेन-देन तालिका में शामिल होने के लिए increment_id का उपयोग करना होगा क्योंकि मैं केवल सामान्य आईडी देख सकता हूं।
मूल रूप से मैं सोच रहा हूं कि इससे निपटने के लिए सबसे अच्छा तरीका क्या है। मैं शायद ऊपर बताए गए परिवर्तन को करने के साथ दूर हो सकता हूं, लेकिन यह सही नहीं लगता है। क्या मैं अपने सम्मिलित बयानों में कुछ भी बदल सकता हूँ?
धन्यवाद।