Question

J'ai un modèle appelé Warehouses et un autre appelé Warehouse Products qui est associé.Le problème que j'ai est que Warehouse Products n'enregistre pas, malgré son save() la fonction étant enveloppée dans un try-catch qui ne produit aucun problème.

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.'));
}

Si j'utilise le modèle pour renvoyer la table, j'obtiens ce qui suit :

$model->getResource()->getTable();
// Can't retrieve entity config

Cela suggère évidemment qu'il y a quelque chose qui ne va pas avec ma configuration -

<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>

La rubrique ressources :

<resources>
    <inventorymanagement_setup>
        <setup>
            <module>TheGenieLab_InventoryManagement</module>
        </setup>
    </inventorymanagement_setup>
</resources>

Mes fichiers sont disposés comme ci-dessous :

- Resource
    - Warehouse
        - Product
            - Collection.php
        - Collection.php
        - Product.php
    - Warehouse.php
- Warehouse
    - Product.php
- Warehouse.php

Y a-t-il autre chose que je dois faire ?

MODIFIER

Voici un code supplémentaire
Entrepôt > Produit.php

class CompanyName_InventoryManagement_Model_Warehouse_Product extends Mage_Core_Model_Abstract
{
    protected function _construct()
    {
        $this->_init('inventorymanagement/warehouse_product');
    }
}

Ressource > Entrepôt > Product.php

class CompanyName_InventoryManagement_Model_Resource_Warehouse_Product extends Mage_Core_Model_Mysql4_Abstract
{
    protected function _construct()
    {
        $this->_init('inventorymanagement/warehouse_product', 'id');
    }
}

Ressource > Entrepôt > Produit > 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');
    }
}
Était-ce utile?

La solution

Je l'ai compris.

Avant le $model->save(); J'ai eu ça :

$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);

Le problème était que, comme $product['id'] était défini comme champ masqué sur le formulaire, il était toujours défini ;la vérification d'isset était donc vraie.C'était une économie, mais comme le $model->load() ce qui se passait, cela n'a permis d'économiser nulle part en particulier.

Pour les méthodes d'addition, j'ai complètement supprimé cette vérification avec l'instruction de chargement, puis j'ai simplement exécuté ceci unset($product['id']); avant de définir les données.

Tout fonctionne très bien !

Licencié sous: CC-BY-SA avec attribution
Non affilié à magento.stackexchange
scroll top