После создания отправления в области администрирования Magento в var/report
папке (после страницы сбоя Magento по умолчанию) появляется следующая ошибка при просмотре страницы сетки заказов администратора:
Item (Mage_Sales_Model_Order) with the same id "1234" already exist
Я могу избавиться от этой ошибки, добавив предложение DISTINCT к селектору объекта varien в app/code/core/Mage/Eav/Model/Entity/Collection/Abstact.php
строке 662. Однако я действительно не хочу этого делать по нескольким причинам (крайне медленные запросы, редактирование основных файлов и т. Д.).
Каков наилучший способ решить эту проблему при сохранении целостности данных. Должен ли я удалить заказ? Я был бы признателен за любой конструктивный вклад, особенно о том, что вызвало бы этот конфликт в первую очередь. Благодарю.
-- редактировать --
Вот полная трассировка стека для ясности / чтобы указать на мою глупость:
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";}
источник
Ответы:
Вы добавили что-то в коллекцию, которая добавляет дубликаты в результат запроса.
Что magento делает с результатом запроса, так это генерирует объект из каждой строки и затем добавляет эти элементы в коллекцию. Если элемент уже существует, выдается эта ошибка.
Решение: Что бы вы ни добавили, проверьте, что ваш результат отличается.
Если вы добавили больше полей, чем поля из
sales_flat_order
, эти поля могут отличаться, и поэтому они будут помечены какDISTINCT
.источник
Я добавляю ответ, так как я еще не мог добавить комментарий. Я согласен с @fabian - однако я не рекомендую использовать
DISTINCT
иGROUP BY
, как правило, вы можете отфильтровать свое объединение по отдельному результату, если вы планируете правильно.Например (я знаю, что это тривиальный пример):
Если вы должны были собирать заказ , используя
sales/flat_order
и вы присоединились адрес клиентов, есть две записи , хранящиеся в платежный адрес и адрес доставки . Чтобы решить эту проблему, можно указать, к какому типу адресов они хотят присоединиться.Это звучит похоже на вашу ситуацию, за исключением этого сценария.
источник
Мы также столкнулись с проблемой в нашей системе. Мы проанализировали проблему и нашли мою
Grid.php
(пример: /namespace/modulename/Block/Adminhtml/Sales/Order/Grid.php)Мы нашли
_prepareCollection()
функцию вGrid.php
файле.Код ошибки:
Решение:
У нас есть использование
->group('value')
в функции фильтра. Сейчас работает нормально ... !!!источник
Я знаю, что это старый вопрос, и на него уже дан ответ, но я хочу добавить свой ответ, потому что я чувствую, что он может помочь другим, сталкивающимся с подобными проблемами. Я пытаюсь объяснить общие причины ошибок такого типа.
Для начала,
Mage_Sales_Model_Order
в стандартной установке Magento никогда не должно выдаваться такая ошибка. Поэтому я подозреваю, что эта ошибка вызвана сторонним расширением (наблюдатель, метод ловушки, перезапись и т. Д.) Или неправильной настройкой кода, которая в первую очередь повредила данные. Если говорить о «странных» основных компонентах,distinct
решение даже не должно существовать, потому что данные никогда не должны были быть повреждены! Лучше сначала исправить сами данные, чем менять код.Я столкнулся с подобной проблемой, когда создал собственный тип сущности EAV, и все работало нормально, пока я не отредактировал одну из сущностей. Каким-то образом редактирование привело к дублированию значения для одного из текстовых атрибутов объекта, то есть двух строк в таблице текстовых значений для одного и того же атрибута одного и того же объекта. Необработанные запросы только к таблице custom_entity выглядели прекрасно, без дубликатов (как это могло быть? Ограничение первичного ключа уже обеспечило целостность), поэтому проблема была где-то еще.
Как вы уже могли догадаться при загрузке коллекции, из-за объединений, использованных для извлечения строк из базы данных, и с учетом того, что для одного и того же атрибута сущности было два одинаковых текстовых значения, он извлек две строки с одинаковым
entity_id
значением, но разнымиvalue_id
.Как правило, когда возникает такая ошибка, вы должны подозревать, что либо данные в базе данных уже были повреждены, либо что соединения, выполняемые во время последнего запроса, извлекут две почти точные строки из базы данных, дублируя уникальный идентификатор коллекции. Предметы.
Надеюсь это поможет.
PS: Относительно того, почему дублированное текстовое значение eav в моем случае, проверьте комментарий Мариуса здесь http://inchoo.net/magento/creating-an-eav-based-models-in-magento/
источник
Это мой код работает хорошо после того, как получил ту же проблему:
У меня есть add -> group ('entity_id'), чтобы решить проблему.
источник
Вы должны попытаться переопределить
Mage_Sales_Model_Resource_Order_Grid_Collection::addItem
это исключение:источник