একই আইডি "এক্স" সহ আইটেম (ম্যাজ_সেলস_মোডেল_ অর্ডার) ইতিমধ্যে বিদ্যমান


12

ম্যাজেন্টোর প্রশাসক অঞ্চলে চালান তৈরি করার পরে, var/reportপ্রশাসক অর্ডার গ্রিড পৃষ্ঠা দেখার সময় ফোল্ডারে (একটি ডিফল্ট ম্যাজেন্টো ক্রাশ পৃষ্ঠার পরে) নিম্নলিখিত ত্রুটিটি উপস্থিত হয় :

Item (Mage_Sales_Model_Order) with the same id "1234" already exist

আমি এই ত্রুটি থেকে মুক্তি পেতে পারি 662২ নং app/code/core/Mage/Eav/Model/Entity/Collection/Abstact.phpলাইনে বৈকল্পিক নির্বাচককে একটি DISTINCT ক্লজ যুক্ত করে However তবে, আমি সত্যিই এটি বেশ কয়েকটি কারণে (মৃত্যুর ধীর অনুসন্ধান, মূল ফাইলগুলি সম্পাদনা ইত্যাদি) করতে চাই না।

ডেটা অখণ্ডতা বজায় রেখে এটি সমাধান করার সর্বোত্তম উপায় কী। আমি অর্ডার মুছে ফেলা উচিত? আমি যে কোনও গঠনমূলক ইনপুটটির প্রশংসা করব, বিশেষত এই সংঘাতের কারণ কী হবে তা নিয়ে। ধন্যবাদ।

- সম্পাদনা -

স্পষ্টতার জন্য আমার স্ট্যাক ট্রেসটি এখানে / আমার বোকামিটি দেখানোর জন্য:

a:5:{i:0;s:67:"Item (Mage_Sales_Model_Order) with the same id "1234" already exist";i:1;s:4829:"#0 lib/Varien/Data/Collection/Db.php(576): Varien_Data_Collection->addItem(Object(Mage_Sales_Model_Order))
#1 app/code/core/Mage/Adminhtml/Block/Widget/Grid.php(533): Varien_Data_Collection_Db->load()
#2 app/code/core/Mage/Adminhtml/Block/Sales/Order/Grid.php(61): Mage_Adminhtml_Block_Widget_Grid->_prepareCollection()
#3 app/code/core/Mage/Adminhtml/Block/Widget/Grid.php(626): Mage_Adminhtml_Block_Sales_Order_Grid->_prepareCollection()
#4 app/code/core/Mage/Adminhtml/Block/Widget/Grid.php(632): Mage_Adminhtml_Block_Widget_Grid->_prepareGrid()
#5 app/code/core/Mage/Core/Block/Abstract.php(862): Mage_Adminhtml_Block_Widget_Grid->_beforeToHtml()
#6 app/code/core/Mage/Core/Block/Abstract.php(582): Mage_Core_Block_Abstract->toHtml()
#7 app/code/core/Mage/Core/Block/Abstract.php(526): Mage_Core_Block_Abstract->_getChildHtml('grid', true)
#8 app/code/core/Mage/Adminhtml/Block/Widget/Grid/Container.php(77): Mage_Core_Block_Abstract->getChildHtml('grid')
#9 app/design/adminhtml/default/default/template/widget/grid/container.phtml(36): Mage_Adminhtml_Block_Widget_Grid_Container->getGridHtml()
#10 app/code/core/Mage/Core/Block/Template.php(241): include('/var/www/html/m...')
#11 app/code/core/Mage/Core/Block/Template.php(272): Mage_Core_Block_Template->fetchView('adminhtml/defau...')
#12 app/code/core/Mage/Core/Block/Template.php(286): Mage_Core_Block_Template->renderView()
#13 app/code/core/Mage/Adminhtml/Block/Template.php(81): Mage_Core_Block_Template->_toHtml()
#14 app/code/core/Mage/Adminhtml/Block/Widget/Container.php(308): Mage_Adminhtml_Block_Template->_toHtml()
#15 app/code/core/Mage/Core/Block/Abstract.php(863): Mage_Adminhtml_Block_Widget_Container->_toHtml()
#16 app/code/core/Mage/Core/Block/Text/List.php(43): Mage_Core_Block_Abstract->toHtml()
#17 app/code/core/Mage/Core/Block/Abstract.php(863): Mage_Core_Block_Text_List->_toHtml()
#18 app/code/core/Mage/Core/Block/Abstract.php(582): Mage_Core_Block_Abstract->toHtml()
#19 app/code/core/Mage/Core/Block/Abstract.php(526): Mage_Core_Block_Abstract->_getChildHtml('content', true)
#20 app/design/adminhtml/default/default/template/page.phtml(74): Mage_Core_Block_Abstract->getChildHtml('content')
#21 app/code/core/Mage/Core/Block/Template.php(241): include('/var/www/html/m...')
#22 app/code/core/Mage/Core/Block/Template.php(272): Mage_Core_Block_Template->fetchView('adminhtml/defau...')
#23 app/code/core/Mage/Core/Block/Template.php(286): Mage_Core_Block_Template->renderView()
#24 app/code/core/Mage/Adminhtml/Block/Template.php(81): Mage_Core_Block_Template->_toHtml()
#25 app/code/core/Mage/Core/Block/Abstract.php(863): Mage_Adminhtml_Block_Template->_toHtml()
#26 app/code/core/Mage/Core/Model/Layout.php(555): Mage_Core_Block_Abstract->toHtml()
#27 app/code/core/Mage/Core/Controller/Varien/Action.php(390): Mage_Core_Model_Layout->getOutput()
#28 app/code/core/Mage/Adminhtml/controllers/Sales/OrderController.php(95): Mage_Core_Controller_Varien_Action->renderLayout()
#29 app/code/core/Mage/Core/Controller/Varien/Action.php(419): Mage_Adminhtml_Sales_OrderController->indexAction()
#30 app/code/core/Mage/Core/Controller/Varien/Router/Standard.php(250): Mage_Core_Controller_Varien_Action->dispatch('index')
#31 app/code/core/Mage/Core/Controller/Varien/Front.php(176): Mage_Core_Controller_Varien_Router_Standard->match(Object(Mage_Core_Controller_Request_Http))
#32 app/code/core/Mage/Core/Model/App.php(354): Mage_Core_Controller_Varien_Front->dispatch()
#33 app/Mage.php(683): Mage_Core_Model_App->run(Array)
#34 index.php(71): Mage::run('base', 'website')
#35 {main}";s:3:"url";s:72:"/index.php/admin/sales_order/index/key/0b7375aca52608483edc0cf879bd4361/";s:11:"script_name";s:10:"/index.php";s:4:"skin";s:5:"admin";}

8
এফডাব্লুআইডাব্লু আমি এই বোবা ত্রুটিটিকে ঘৃণা করি এবং এটির ডিবাগিংটি স্বীকার করার জন্য আমার যত্নের চেয়ে বেশি সময় ব্যয় করেছি।
ফিলিঙ্কল

আপনি কি আপনার সংগ্রহে ক্যোয়ারী বা পিএইচপি কোড অন্তর্ভুক্ত করতে পারেন?
সুকেশিনী

উত্তর:


10

আপনি সংগ্রহে কিছু যুক্ত করেছেন, যা ক্যোয়ারী ফলাফলে সদৃশ যুক্ত করে।

ক্যোরিয়ার ফলাফলের সাথে ম্যাজেন্টো কী করে তা হ'ল প্রতিটি সারি থেকে অবজেক্ট তৈরি করা এবং তারপরে সংগ্রহগুলিতে এই আইটেমগুলি যুক্ত করা। আইটেমটি ইতিমধ্যে বিদ্যমান থাকলে, এই ত্রুটি নিক্ষেপ করা হয়।

সমাধান: আপনি যা কিছু যোগ করুন, আপনার ফলাফল স্বতন্ত্র কিনা তা পরীক্ষা করে দেখুন।

আপনি যদি এর থেকে অন্য ক্ষেত্রগুলি যুক্ত করেন তবে sales_flat_orderএই ক্ষেত্রগুলি পৃথক হতে পারে এবং তাই সেগুলি নোটের সাথে ফিল্টার করা হয় DISTINCT


6

আমি একটি উত্তর যুক্ত করছি যেহেতু আমি এখনও কোনও মন্তব্য যুক্ত করতে পারিনি। আমি @ ফ্যাবিয়ার সাথে একমত - তবে আমি এর ব্যবহারকে নিরুৎসাহিত করি DISTINCTএবং GROUP BYসাধারণত আপনি যদি সঠিকভাবে পরিকল্পনা করেন তবে আপনি নিজের যোগটিকে একটি পৃথক ফলাফলে ফিল্টার করতে পারেন।

উদাহরণস্বরূপ (আমি জানি এটি একটি তুচ্ছ উদাহরণ):

আপনি যদি কোনও অর্ডার ব্যবহার করে সংগ্রহ sales/flat_orderকরতে এবং গ্রাহকদের ঠিকানায় যোগ দিয়ে থাকেন তবে দুটি বিল্ডিং বিলিং ঠিকানা এবং বিতরণ ঠিকানা সঞ্চিত আছে । এই সমস্যাটি সমাধান করার জন্য যে কোনওরাই ঠিকানাটিতে যোগদান করতে চান তা নির্দিষ্ট করতে পারেন।

এই পরিস্থিতিটি বাদ দিয়ে এটি আপনার পরিস্থিতির সাথে সাদৃশ্যপূর্ণ।


3

আমাদের সিস্টেমেও আমরা কিছু সমস্যার মুখোমুখি হয়েছি। আমরা সমস্যাটি বিশ্লেষণ করেছি এবং আমার Grid.php(উদাহরণস্বরূপ: /namespace/modulename/Block/Adminhtml/ বিক্রয় / অর্ডার / গ্রিড.পিএপি) পেয়েছি

আমরা ফাইলটিতে _prepareCollection()ফাংশন খুঁজে পেয়েছি Grid.php

কোডিংয়ে ত্রুটিটি হ'ল:

//Error coding
$collection->join(array('payment' => 'sales/order_payment'), 'main_table.entity_id = parent_id', 'method')
            ->getSelect()
            ->where("`payment`.`method` like '%paypal%'");

সমাধান:

//Solution coding
$collection->join(array('payment' => 'sales/order_payment'), 'main_table.entity_id = parent_id', 'method')
            ->getSelect()
            ->where("`payment`.`method` like '%paypal%'")
            ->group('method');

আমাদের ->group('value')ফিল্টার ফাংশনে ব্যবহার রয়েছে। এখন ঠিকঠাক কাজ করছি ... !!!


3

আমি জানি এটি একটি পুরানো প্রশ্ন এবং এর উত্তর ইতিমধ্যে দেওয়া হয়েছে তবে আমি আমার উত্তর যুক্ত করতে চাই কারণ আমার মনে হয় এটি অন্যান্য অনুরূপ সমস্যার মুখোমুখি হতে পারে। আমি এই ধরণের ত্রুটির সাধারণ কারণগুলি ব্যাখ্যা করার চেষ্টা করছি।

শুরু করার জন্য, Mage_Sales_Model_Orderএকটি স্ট্যান্ডার্ড ম্যাজেন্টো ইনস্টলেশনতে কখনই এ জাতীয় ত্রুটি দেওয়া উচিত নয়। সুতরাং আমি সন্দেহ করি যে এই ত্রুটিটি তৃতীয় পক্ষের এক্সটেনশান (পর্যবেক্ষক, হুক পদ্ধতি, পুনর্লিখন, ইত্যাদি) বা একটি অনুপযুক্ত কোড কাস্টমাইজেশনের কারণে ঘটেছে যা ডেটা প্রথম স্থানে দূষিত করে। "অদ্ভুত" অভিনয়ের জন্য মূল উপাদানগুলি সম্পর্কে কথা বলার সময় distinctসমাধানটির অস্তিত্বও থাকা উচিত নয় কারণ ডেটা প্রথম স্থানে কখনও দুর্নীতি করা উচিত হয়নি! কোড পরিবর্তন করার চেয়ে প্রথমে ডেটা ঠিক করা ভাল।

আমি যখন কাস্টম EAV সত্তার প্রকারটি তৈরি করেছি এবং সত্তাগুলির মধ্যে একটির সম্পাদনা না করা পর্যন্ত সবকিছু ঠিকঠাক কাজ করেছে তখন আমি একই ধরণের সমস্যার মুখোমুখি হয়েছি। যাইহোক, সম্পাদনাটির ফলে সত্তার পাঠ্য বৈশিষ্ট্যের একটির জন্য সদৃশ মান, যা একই সত্তার একই বৈশিষ্ট্যের জন্য পাঠ্য মান সারণীতে দুটি সারি। কাঁচের অনুসন্ধানে কেবলমাত্র কাস্টম_েন্টিটি টেবিলটি কোনও নকল ছাড়াই পুরোপুরি সূক্ষ্ম দেখাচ্ছে (এটি কীভাবে হতে পারে? প্রাথমিক কী সীমাবদ্ধতা ইতিমধ্যে সততা নিশ্চিত করেছে) সুতরাং সমস্যাটি অন্য কোথাও ছিল।

যেমন আপনি সংগ্রহটি লোড করার সময় ইতিমধ্যে অনুমান করতে পারেন, কারণ ডাটাবেস থেকে সারিগুলি পুনরুদ্ধার করতে ব্যবহৃত হয় এবং সত্তার একই বৈশিষ্ট্যের জন্য দুটি একই পাঠ্য মান ছিল তা বিবেচনা করে, এটি একই entity_idমান সহ পৃথক দুটি সারি পুনরুদ্ধার করে value_id

একটি সাধারণ নিয়ম হিসাবে, যখন এইরকম ত্রুটি দেখা দেয় তখন আপনার সন্দেহ হওয়া উচিত যে ডাটাবেসে থাকা ডেটা ইতিমধ্যে দূষিত হয়ে গেছে বা চূড়ান্ত ক্যোয়ারির সাথে যুক্ত হওয়াগুলি সংগ্রহের অনন্য সনাক্তকারীকে নকল করে ডাটাবেস থেকে দুটি প্রায় সঠিক সারি উদ্ধার করবে আইটেম।

আশাকরি এটা সাহায্য করবে.

পিএস: কেন আমার ক্ষেত্রে সদৃশ ইভা পাঠ্যের মান, মারিয়াসের মন্তব্যটি এখানে পরীক্ষা করুন http://inchoo.net/magento/creating-an-eav-based-models-in-magento/


0

আমার কোডটি একই সমস্যা হওয়ার পরে ভাল কাজ করেছে:

    $collection = Mage::getResourceModel('sales/order_grid_collection');
    $prefix = Mage::getConfig()->getTablePrefix();  

    $collection->getSelect()->joinleft(array('order'=> $prefix.'sales_flat_order'),'order.entity_id=main_table.entity_id',array('pdeliverydate'));   

    $collection->getSelect()->joinleft(array('address'=> $prefix.'sales_flat_order_address'),'address.parent_id=main_table.entity_id',array('telephone'))->group('entity_id');

    $this->setCollection($collection);
    return parent::_prepareCollection();

সমস্যা সমাধানের জন্য আমি -> গ্রুপ ('সত্তা_আইডি') যুক্ত করেছি।


ইতিমধ্যে 1 বছর আগে প্রস্তাবিত ( magento.stackexchange.com/a/139898/46249 ) ... -1।
এসভি

-1

আপনাকে Mage_Sales_Model_Resource_Order_Grid_Collection::addItemএই ওপেনরাইড করার চেষ্টা করতে হবে যে এই আক্রমণটি ছুড়ে ফেলেছে:

<?php
class Fixed_Order_Grid_Collection extends Mage_Sales_Model_Resource_Order_Grid_Collection{

    public function addItem(Varien_Object $item)
    {
        $itemId = $this->_getItemId($item);

        if (!is_null($itemId)) {
            if (isset($this->_items[$itemId])) {
                //throw new Exception('Item ('.get_class($item).') with the same id "'.$item->getId().'" already exist');
            }
            $this->_items[$itemId] = $item;
        } else {
            $this->_addItem($item);
        }
        return $this;
    }
}
class MyCompony_MyExtention_Block_Adminhtml_OrderGrid extends Mage_Adminhtml_Block_Widget_Grid
{
     public function __construct()
    {
        parent::__construct();
        $this->setId('sales_order_grid');
        $this->setUseAjax(true);
        $this->setDefaultSort('created_at');
        $this->setDefaultDir('DESC');
        $this->setSaveParametersInSession(true);
    }
    protected function _getCollectionClass()
    {
        return 'sales/order_grid_collection';
    }

    protected function _prepareCollection()
    {
        $collection = new Fixed_Order_Grid_Collection();
        $select = $collection->getSelect();
        $select->join('sales_flat_order_item AS order_item', 'order_item.order_id=main_table.entity_id','quote_item_id',NULL);
        $select->distinct();
        $this->setCollection($collection);
        return parent::_prepareCollection();
    }
...

1
এটি কোনও সমাধান নয়, ত্রুটি বার্তা থেকে মুক্তি পাওয়ার সহজ উপায়।
নীলস

1
স্কোয়াশিং ত্রুটিগুলি তাদের ঠিক করার মতো নয়, আপনার সংগ্রহের ফলাফলের সাথে আলাদা যোগ করার বিষয়টি বিবেচনা করুন বা কোনও ক্ষেত্র দ্বারা যোগদানের ক্যোয়ারীটিকে গোষ্ঠীভুক্ত করুন।
ডিভিস
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.