এর জন্য কিছুটা প্রসঙ্গ। আমি আরও কলাম পেতে বিক্রয় ক্রম রফতানি কার্য (গ্রিডের মাধ্যমে) প্রসারিত করতে চাই। আমি একটি মডিউল তৈরি করেছি যা রফতানির জন্য একটি নতুন গ্রিড যুক্ত করে এবং একটি নতুন সংগ্রহের মডেল যা মূলটিকে প্রসারিত করে। এটি _বিফরডলোড () ফাংশনটি ব্যবহার করে যাতে আমি আমার প্রয়োজনীয় টেবিলগুলিতে যোগ দিতে পারি।
আমার যে সমস্যা হচ্ছে তা হ'ল যখন গ্রিড থেকে ফিল্টারগুলি যুক্ত করা হয় (ইনক্রিমেন্ট_আইডি, অর্ডার তারিখ ইত্যাদি), যেখানে এই ধারাটি যুক্ত করা হয় তা সারণির উপরিবর্তন করে না এবং আমি অস্পষ্ট কলামের নাম নিয়ে সমস্যা পাচ্ছি। উদাহরণস্বরূপ, ইনক্রিমেন্ট_আইডিতে আমি যেখানে সমস্যাটিতে সমস্যাটি করছি:
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`
এই যেখানে ক্লজটি যুক্ত করার আগে আমি _ডডকলম ফিল্টারটোকলকশন () ফাংশনে অন্যান্য টেবিলগুলিতে যোগদানের আগে যুক্ত করা হবে
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);
এবং এটি কাজ করেছে তবে এটি করার দুর্দান্ত উপায় অনুভব করে না।
_পরেলডে আমার কোডটি ()
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();
}
বিক্রয় অর্ডারের গ্রিড টেবিল এবং সেজপেই লেনদেনের টেবিলটিতে যোগদানের জন্য আমাকে ইনক্রিমেন্ট_আইডি ব্যবহার করতে হবে কারণ আমি দেখতে পাচ্ছি এটিই কেবলমাত্র সাধারণ আইডি।
মূলত আমি ভাবছি যে এটিকে মোকাবেলা করার জন্য সর্বোত্তম পন্থাটি কী। আমি উপরে উল্লিখিত পরিবর্তনটি করে সম্ভবত পালাতে পারলাম তবে এটি সঠিক মনে হচ্ছে না। আমার যোগদানের বিবৃতিগুলিতে আমি কী পরিবর্তন করতে পারি?
ধন্যবাদ।