Модель не сохраняется в базе данных
-
12-12-2019 - |
Вопрос
У меня есть модель под названием «Склады» и другая, называемая «Складские продукты», которая связана с ней.Проблема, с которой я столкнулся, заключается в том, что Warehouse Products не сохраняется, несмотря на то, что save()
функция обернута в try-catch, который не вызывает проблем.
try {
$model->save();
$session->addSuccess($this->__('The product has been saved.'));
$this->_redirect('*/*/');
return;
} catch (Mage_Core_Exception $e) {
$session->addError($e->getMessage());
} catch (Exception $e) {
$session->addError($this->__('An error occurred while saving this product.'));
}
Если я использую модель для возврата таблицы, я получаю следующее:
$model->getResource()->getTable();
// Can't retrieve entity config
Это явно говорит о том, что с моей настройкой что-то не так -
<inventorymanagement>
<class>CompanyName_InventoryManagement_Model</class>
<resourceModel>inventorymanagement_resource</resourceModel>
</inventorymanagement>
<inventorymanagement_resource>
<class>TheGenieLab_InventoryManagement_Model_Resource</class>
<entities>
<warehouse>
<table>inventorymanagement_warehouse</table>
</warehouse>
<warehouse_product>
<table>inventorymanagement_warehouse_product</table>
</warehouse_product>
</entities>
</inventorymanagement_resource>
Раздел ресурсов:
<resources>
<inventorymanagement_setup>
<setup>
<module>TheGenieLab_InventoryManagement</module>
</setup>
</inventorymanagement_setup>
</resources>
Мои файлы расположены следующим образом:
- Resource
- Warehouse
- Product
- Collection.php
- Collection.php
- Product.php
- Warehouse.php
- Warehouse
- Product.php
- Warehouse.php
Есть ли что-то еще, что мне нужно сделать?
РЕДАКТИРОВАТЬ
Вот еще код
Склад > Product.php
class CompanyName_InventoryManagement_Model_Warehouse_Product extends Mage_Core_Model_Abstract
{
protected function _construct()
{
$this->_init('inventorymanagement/warehouse_product');
}
}
Ресурс > Склад > Product.php
class CompanyName_InventoryManagement_Model_Resource_Warehouse_Product extends Mage_Core_Model_Mysql4_Abstract
{
protected function _construct()
{
$this->_init('inventorymanagement/warehouse_product', 'id');
}
}
Ресурс > Склад > Продукт > Collection.php
class CompanyName_InventoryManagement_Model_Resource_Warehouse_Product_Collection extends Mage_Core_Model_Mysql4_Collection_Abstract
{
protected function _construct()
{
$this->_init('inventorymanagement/warehouse_product');
}
}
Решение
Я понял это.
До $model->save();
у меня было это:
$model = Mage::getModel('inventorymanagement/warehouse_product');
$product = $postData['warehouse_product'];
if (isset($product['id'])) {
$model->load($product['id']);
}
$product['product_id'] = str_replace('product/', '', $product['product_id']);
unset($product['save']);
$model->setData($product);
Проблема заключалась в том, что, поскольку $product['id'] было установлено как скрытое поле в форме, оно всегда устанавливалось;таким образом, проверка isset была верной.Это было экономией, но поскольку $model->load()
происходило, нигде конкретно не сохранялось.
Для методов Addition я полностью удалил эту проверку вместе с оператором загрузки, а затем просто запустил это unset($product['id']);
до установки данных.
Все работает отлично!