Вопрос

У меня есть модель под названием «Склады» и другая, называемая «Складские продукты», которая связана с ней.Проблема, с которой я столкнулся, заключается в том, что 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']); до установки данных.

Все работает отлично!

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