#web-services #magento
#веб-сервисы #magento
Вопрос:
Я использую API V2 « salesOrderList
» для получения списка всех заказов, которые были размещены в Magento. Но ответ SOAP показывает мне ошибку как:-
Item (Mage_Sales_Model_Order) with the same id "1" already exist
Я использую Magento Enterprise версии 1.9.0.0.
После изучения SQL и поиска в базе данных я обнаружил, что для каждого заказа SQL предоставляет 4 записи для одного и того же идентификатора объекта заказа; разница заключается только в полях имени области выставления счетов и доставки. Также запрос выполняет два левых соединения с одной и той же таблицей базы данных « sales_flat_order_address
«, используя два разных псевдонима (один для выставления счетов, а другой для доставки). Насколько я понимаю, это должно было сработать, чего не происходит.
Кто-нибудь, пожалуйста, может подсказать, что происходит и что можно сделать, чтобы исправить эту ошибку?
Любая помощь приветствуется и заранее благодарна.
Ответ №1:
Грубо говоря, Magento создает для вас коллекцию заказов и пытается загрузить все записи. В этой коллекции есть правило, которое позволяет создавать только один объект заказа для каждого идентификатора, поэтому при загрузке вашего дополнительного объекта выдается исключение.
Проблема может быть в соединениях слева, но сразу сказать сложно. Не могли бы вы опубликовать немного подробностей о том, как вы выполняете вызов API? Эта проблема часто возникает при неправильном соединении.
Редактировать:
Если вы используете код по умолчанию, моим первым предположением было бы, что в базе данных есть ошибочные записи или что это обновленная система Magento, у которой в прошлом было плохое обновление. Попробуйте это на чистой копии вашей EE-версии, указывающей на ту же базу данных. Если возникает та же проблема, возможно, вам потребуется выполнить поиск в базе данных в поисках причины проблемной загрузки данных. Поскольку у вас уже есть запрос, вы можете захотеть выделить части запроса, чтобы посмотреть, не возвращает ли какой-либо подзапрос слишком много данных.
Комментарии:
1. Я использую код Magento по умолчанию, но и в этом случае я получаю ту же ошибку. Вы можете посмотреть на этот класс »
Mage_Sales_Model_Order_Api_V2
» для этого метода »items
«. Меня беспокоит только то, почему код Magento по умолчанию не работает и что я должен сделать, чтобы это заработало? Пожалуйста, помогите. Спасибо.2. После выполнения упомянутых вами шагов я обнаружил, что результатом SQL является 4 записи для каждого заказа. Причина этого отчасти в том, что адрес выставления счета и адрес доставки отличаются. Тем не менее, многие предыдущие встречи с заказами такого типа по-прежнему работают только с одной записью для каждого заказа. Еще какие-нибудь идеи?
3. Если адреса выставления счетов и доставки хранятся как разные псевдонимы, нет причин, по которым это должно приводить к мультиплексированию каждой записи. Можете ли вы отредактировать вопрос с помощью сгенерированного SQL и примера одного заказа (все четыре строки), который возвращается?
4. Большое спасибо за ваши ценные предложения. После переустановки всей промежуточной версии Magento Enterprise это начало работать корректно, без каких-либо подобных проблем. (фух)