Modell wird nicht in der Datenbank gespeichert
-
12-12-2019 - |
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');
}
}
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!