عدم حفظ النموذج في قاعدة البيانات
-
12-12-2019 - |
سؤال
لدي نموذج يسمى المستودعات وآخر يسمى منتجات المستودعات وهو مرتبط.المشكلة التي أواجهها هي أن منتجات المستودعات لا تقوم بالحفظ، على الرغم من ذلك save()
يتم تغليف الوظيفة في محاولة الالتقاط والتي لا تنتج أي مشاكل.
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()
كان يحدث، ولم يكن يتم حفظه في أي مكان على وجه الخصوص.
بالنسبة لطرق الإضافة، قمت بإزالة هذا الفحص بالكامل مع بيان التحميل، ثم قمت ببساطة بتشغيله unset($product['id']);
قبل إعداد البيانات.
كل شيء يعمل بشكل رائع!