আমি ম্যাজেন্টো অ্যাডমিন মডিউলে একটি গ্রিডের জন্য একটি কাস্টম সংগ্রহ তৈরির চেষ্টা করছি। আমি "অ্যাডঅ্যাট্রিবিউটহ্যাভিং" নামে একটি নতুন সংগ্রহের পদ্ধতি তৈরি করেছি যা কেবল নিম্নলিখিতটি করে:
public function addAttributeHaving($value)
{
$this->getSelect()->having($value);
return $this;
}
সংগ্রহের কোডটি দেখুন:
$collection->addFieldToSelect(
array(
'entity_id',
'created_at',
'increment_id',
'customer_email',
'customer_firstname',
'customer_lastname',
'grand_total',
'status'
)
);
$collection->getSelect()->joinLeft(array('sfop' => 'sales_flat_order_payment'), 'main_table.entity_id = sfop.parent_id', 'sfop.amount_authorized');
$collection->getSelect()->columns('sum(sfop.amount_authorized) AS AUTHD');
$collection->getSelect()->columns('grand_total - sum(sfop.amount_authorized) AS DIF_AU');
$collection->addFieldToFilter('main_table.state', array('in' => array('new','payment_review')));
$collection->addFieldToFilter('main_table.sd_order_type', array('neq' => 7));
$collection->addFieldToFilter('sfop.method', array('neq' => 'giftcard'));
$collection->addFieldToFilter('main_table.created_at', array('gt' => $this->getFilterDate()));
$collection->getSelect()->group(array('main_table.entity_id'));
$collection->addAttributeHaving('DIF_AU <> 0');
$collection->load(true,true);
$this->setCollection($collection);
এটি নিম্নলিখিত এসকিউএল উত্পাদন করে যা পুরোপুরি সূক্ষ্মভাবে কার্যকর করে এবং ম্যাজেন্টোর বাইরে দৌড়ালে প্রত্যাশিত ফলাফল দেয়।
[METHOD=Varien_Data_Collection_Db->printLogQuery] SELECT `main_table`.`entity_id`, `main_table`.`entity_id`, `main_table`.`created_at`, `main_table`.`increment_id`, `main_table`.`customer_email`, `main_table`.`customer_firstname`, `main_table`.`customer_lastname`, `main_table`.`grand_total`, `main_table`.`status`, `sfop`.`amount_authorized`, sum(sfop.amount_authorized) AS `AUTHD`, grand_total - sum(sfop.amount_authorized) AS `DIF_AU` FROM `sales_flat_order` AS `main_table` LEFT JOIN `sales_flat_order_payment` AS `sfop` ON main_table.entity_id = sfop.parent_id WHERE (main_table.state in ('new', 'payment_review')) AND (main_table.sd_order_type != 7) AND (sfop.method != 'giftcard') AND (main_table.created_at > '2013-04-07') GROUP BY `main_table`.`entity_id` HAVING (DIF_AU <> 0)
যাইহোক, আমি যখন ম্যাজেন্টোর ভিতরে গ্রিডটি লোড করার চেষ্টা করি তখন আমি নিম্নলিখিত ত্রুটিটি পাই:
এসকিউএলসেট [42 এস 22]: কলামটি পাওয়া যায় নি: 1054 অজানা কলাম 'ডিআইএফ_এইউ' 'ক্লজ থাকার কারণে'
অধিকন্তু, আমি যদি এই ধারাটি অপসারণ করি (যা আমার ফলাফলগুলিকে ভেঙে দেয়), আমি গ্রিডে একটি ডেটাসোর্সের জন্য DIF_AU কলামটি ব্যবহার করতে সক্ষম হয়েছি।
sd_order_type
আসছে?