在深入研究时,我意识到这eav_entity_type.increment_per_store
可能会有所帮助。
它是。但是仅在这种情况下,当您希望Magento安装的所有商店视图(无论是在哪个网站定义的全局视图)共享相同的订货号increment_id
范围时。
这不能解决我的特定问题,但是可能对其他一些问题有所帮助,所以我们开始:
要激活您的订单号的全局共享,请将eav_entity_type.increment_per_store
订单实体设置为0
,
这将导致在加载订单实体的记录时Mage_Eav_Model_Entity_Type::fetchNewIncrementId()
使用它,无论它真正属于哪个商店视图。store_id = 0
eav_entity_store
如果不存在这样的记录,Magento将使用store_id
和increment_prefix
来创建一个0
。
public function fetchNewIncrementId($storeId = null)
{
if (!$this->getIncrementModel()) {
return false;
}
if (!$this->getIncrementPerStore() || ($storeId === null)) {
/**
* store_id null we can have for entity from removed store
*/
$storeId = 0;
}
// Start transaction to run SELECT ... FOR UPDATE
$this->_getResource()->beginTransaction();
$entityStoreConfig = Mage::getModel('eav/entity_store')
->loadByEntityStore($this->getId(), $storeId);
if (!$entityStoreConfig->getId()) {
$entityStoreConfig
->setEntityTypeId($this->getId())
->setStoreId($storeId)
->setIncrementPrefix($storeId)
->save();
}
$incrementInstance = Mage::getModel($this->getIncrementModel())
->setPrefix($entityStoreConfig->getIncrementPrefix())
->setPadLength($this->getIncrementPadLength())
->setPadChar($this->getIncrementPadChar())
->setLastId($entityStoreConfig->getIncrementLastId())
->setEntityTypeId($entityStoreConfig->getEntityTypeId())
->setStoreId($entityStoreConfig->getStoreId());
/**
* do read lock on eav/entity_store to solve potential timing issues
* (most probably already done by beginTransaction of entity save)
*/
$incrementId = $incrementInstance->getNextId();
$entityStoreConfig->setIncrementLastId($incrementId);
$entityStoreConfig->save();
// Commit increment_last_id changes
$this->_getResource()->commit();
return $incrementId;
}
这应该使用任何实体类型的工作eav/entity_increment_numeric
模式,比如order
,invoice
,shipment
和creditmemo
。
但是请注意,我还没有找到任何官方文档increment_per_store
。而且Magento后端没有选项可让您配置它。
这可能意味着也可能不意味着它不被正式使用。
使用风险自负。如果您的更改造成了严重破坏,请不要怪我。您已被警告^^