Modello non salvataggio del database
-
12-12-2019 - |
Domanda
Ho un modello chiamato magazzini e un altro prodotto di magazzino che è associato.Il problema che sto avendo è che i prodotti del magazzino non salvano, nonostante la sua funzione save()
sia avvolta in una cattura prova che non produce problemi.
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.'));
}
.
Se utilizzo il modello per restituire la tabella, ottengo quanto segue:
$model->getResource()->getTable();
// Can't retrieve entity config
.
Questo ovviamente suggerisce che c'è qualcosa di sbagliato con la mia configurazione -
<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 sezione Risorse:
<resources>
<inventorymanagement_setup>
<setup>
<module>TheGenieLab_InventoryManagement</module>
</setup>
</inventorymanagement_setup>
</resources>
.
I miei file sono disposti come sotto:
- Resource
- Warehouse
- Product
- Collection.php
- Collection.php
- Product.php
- Warehouse.php
- Warehouse
- Product.php
- Warehouse.php
.
C'è qualcos'altro che devo fare?
Modifica
Ecco alcuni ulteriori codici
Magazzino> Prodotto.php
.
class CompanyName_InventoryManagement_Model_Warehouse_Product extends Mage_Core_Model_Abstract
{
protected function _construct()
{
$this->_init('inventorymanagement/warehouse_product');
}
}
Risorsa> Magazzino> Prodotto.php
.
class CompanyName_InventoryManagement_Model_Resource_Warehouse_Product extends Mage_Core_Model_Mysql4_Abstract
{
protected function _construct()
{
$this->_init('inventorymanagement/warehouse_product', 'id');
}
}
Risorsa> Magazzino> Prodotto> Collezione.php
.class CompanyName_InventoryManagement_Model_Resource_Warehouse_Product_Collection extends Mage_Core_Model_Mysql4_Collection_Abstract
{
protected function _construct()
{
$this->_init('inventorymanagement/warehouse_product');
}
}
Soluzione
L'ho capito.
Prima del $model->save();
ho avuto questo:
$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);
.
Il problema era che come $ prodotto ['ID'] è stato impostato come campo nascosto sul modulo, quindi è stato sempre impostato;Quindi il controllo di ESSET è stato vero.Stava salvando, ma poiché il $model->load()
stava accadendo, non stava risparmiando ovunque in particolare.
Per i metodi di aggiunta, ho rimosso questo controllo completamente insieme con l'istruzione del caricamento, quindi ho semplicemente eseguito questo unset($product['id']);
prima di impostare i dati.
Tutto il lavoro fantastico!