Как изменить префикс приращения заказа?
-
13-12-2019 - |
Вопрос
Я управляю магазином (Magento CE 1.6.2) с 4 различными представлениями магазина, которые имеют (по историческим причинам) идентификаторы 1, 3, 4 и 7.Номера заказов выглядели так: 10000001, 30000001, 40000001, 70000001.
Я установил новую установку с Magento CE 1.9.1, но теперь идентификаторы магазина равны 1, 2, 3, 4...
Как мне изменить это в старой ситуации?
Я наткнулся на этот пост --> http://www.thevortexcode.com/how-to-change-order-prefix-and-default-value-of-ordershipmentinvoice-numbercredit-memo-in-magento/ объясняя, как установить/изменить eav_entity_store.increment_prefix
Но в 1.9 это не работает...
Решение
Просто отредактируйте идентификаторы магазинов в store_id
столбец в core_store
таблица базы данных.Из-за внешних ключей это будет обновлено почти во всех других таблицах.
Дополнительно вам следует обновить:
default_store_id
столбец вcore_store_group
стол
Как уже отмечалось, изменение фактического идентификатора базы данных было бы немного радикальным.Также вам все равно придется обновить eav_entity_store
стол.
Таким образом, вы также можете просто установить конфигурацию для каждого магазина для ваших дополнительных идентификаторов.Вы можете сделать это в eav_entity_store
стол:
- Для идентификатора магазина 1 установите
increment_prefix
до 1 - Для идентификатора магазина 2 установите
increment_prefix
до 3 - Для идентификатора магазина 3 установите
increment_prefix
до 4 - Для идентификатора магазина 4 установите
increment_prefix
до 7
Другие советы
Лучше использовать модельные обертки, а не сырые операторы SQL.
<Сильный> Пример:
$productEntityType = Mage::getModel('eav/entity_type')
->loadByCode(Mage_Catalog_Model_Product::ENTITY);
$entityStoreConfig = Mage::getModel('eav/entity_store')
->loadByEntityStore($productEntityType->getId(), 0);
$entityStoreConfig->setEntityTypeId($productEntityType->getId())
->setStoreId(0)
->setIncrementPrefix($prefix)
->setIncrementLastId($lastId)
->save();
.
<Сильные> см.:
Я должен был сделать это много раз по разным причинам, и это то, что я делаю:
Этот запрос покажет вам идентификатор приращения только для Entity_Type_Code= order
SELECT * FROM eav_entity_store join eav_entity_type ON eav_entity_type.entity_type_id = eav_entity_store.entity_type_id
WHERE eav_entity_type.entity_type_code='order';
.
Как только вы нашли строки, вы хотели бы обновить, вы можете изменить их так:
UPDATE eav_entity_store
INNER JOIN eav_entity_type ON eav_entity_type.entity_type_id = eav_entity_store.entity_type_id
SET eav_entity_store.increment_prefix='X'
WHERE eav_entity_type.entity_type_code='order' and eav_entity_store.eav_entity_store_id = {row_id_here};
.
Если у вас есть <сильные> цитаты с зарезервированным увеличением_order_Id, то возможно, что вы все равно будете видеть заказы со старым увеличением_id . Как только вы начнете генерировать новые цитаты после обновления, все должно быть в порядке.
Обычно в моей среде разработки я только что устанавливаю все цитаты iS_ Active= 0 после обновления invertrement_id просто чтобы иметь новое начало.
Для получения дополнительной информации проверьте здесь: http://www.warpconduit.net/2012/04/18/how-to-change-de-order-increment-id-and-prefix-in-magento/
Я действительно пытаюсь избегать прямых запросов в Magento DB.Если возможно, создайте простой модуль, который имеет сценарий установки или обновления, который сделает это для вас.Например, вы можете использовать следующий скрипт для изменения префикса ID приращения и приращения:
<?php
$this->startSetup();
/*
* Get the resource model
*/
$resource = Mage::getSingleton('core/resource');
/*
* Retrieve the write connection
*/
$writeConnection = $resource->getConnection('core_write');
/*
* Retrieve our table name
*/
$table = $resource->getTableName('eav/entity_store');
$table2=$resource->getTableName('eav/entity_type');
$query = "UPDATE {$table}
INNER JOIN {$table2} ON {$table2}.entity_type_id ={$table}.entity_type_id
SET {$table}.increment_last_id='XXXXXXXXX'
WHERE {$table2}.entity_type_code='order' AND eav_entity_store.store_id = 'Y'";
/*
* Execute the query
*/
$writeConnection->query($query);
$this->endSetup();
.
Где XXXXXXXXX - ваш идентификатор приращения, который вы хотите начать в том, чтобы начать, а Y - это идентификатор магазина, который вы хотите сделать для этого.
Чтобы изменить фактический префикс, используйте запрос ниже:
$query = "UPDATE {$table}
INNER JOIN {$table2} ON {$table2}.entity_type_id ={$table}.entity_type_id
SET {$table}.increment_prefix='X'
WHERE {$table2}.entity_type_code='order' AND eav_entity_store.store_id = 'Y'";
.
Где X - префикс, который вы хотите использовать, и Y - это идентификатор SOTRE, для этого вы хотите сделать.