在深入研究时,我意识到这eav_entity_type.increment_per_store可能会有所帮助。
它是。但是仅在这种情况下,当您希望Magento安装的所有商店视图(无论是在哪个网站定义的全局视图)共享相同的订货号increment_id范围时。
这不能解决我的特定问题,但是可能对其他一些问题有所帮助,所以我们开始:
要激活您的订单号的全局共享,请将eav_entity_type.increment_per_store订单实体设置为0,
这将导致在加载订单实体的记录时Mage_Eav_Model_Entity_Type::fetchNewIncrementId()使用它,无论它真正属于哪个商店视图。store_id = 0eav_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后端没有选项可让您配置它。
这可能意味着也可能不意味着它不被正式使用。
使用风险自负。如果您的更改造成了严重破坏,请不要怪我。您已被警告^^