Frage

Ich habe ein Modell namens Warehouses und ein anderes namens Warehouse Products, das zugeordnet ist.Das Problem, das ich habe, ist, dass Lagerprodukte nicht sparen, obwohl es so ist save() funktion wird in einen Try-Catch eingeschlossen, der keine Probleme verursacht.

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

Wenn ich das Modell verwende, um die Tabelle zurückzugeben, erhalte ich Folgendes:

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

Dies deutet offensichtlich darauf hin, dass mit meinem Setup etwas nicht stimmt -

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

Der Abschnitt Ressourcen:

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

Meine Dateien sind wie folgt angeordnet:

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

Muss ich noch etwas tun?

BEARBEITEN

Hier ist ein weiterer Code
Lager > Produkt.PHP

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

Ressource > Lager > Produkt.PHP

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

Ressource> Lager> Produkt> Sammlung.PHP

class CompanyName_InventoryManagement_Model_Resource_Warehouse_Product_Collection extends Mage_Core_Model_Mysql4_Collection_Abstract
{
    protected function _construct()
    {
        $this->_init('inventorymanagement/warehouse_product');
    }
}
War es hilfreich?

Lösung

Ich habe es herausgefunden.

Vor dem $model->save(); Ich hatte das:

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

Das Problem war, dass $product ['id'] als verstecktes Feld im Formular festgelegt wurde und dann immer festgelegt wurde;somit war der Isset-Check wahr.Es war sparen, aber weil die $model->load() es passierte, es wurde nirgendwo besonders gespart.

Bei Additionsmethoden habe ich diese Prüfung zusammen mit der load-Anweisung vollständig entfernt und dann einfach Folgendes ausgeführt unset($product['id']); vor dem Einstellen der Daten.

Alles funktioniert super!

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit magento.stackexchange
scroll top