Вопрос

Я управляю магазином (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};
.

Обратите внимание, что значение для увеличения riscretion_last_id уже содержит riscretion_prefix, поэтому я обычно удаляю старый riscretion_prefix из riscretion_last_id, чтобы новый приручений id заказы выглядит хорошо.

Если у вас есть <сильные> цитаты с зарезервированным увеличением_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, для этого вы хотите сделать.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с magento.stackexchange
scroll top