سؤال

لدي نموذج يسمى المستودعات وآخر يسمى منتجات المستودعات وهو مرتبط.المشكلة التي أواجهها هي أن منتجات المستودعات لا تقوم بالحفظ، على الرغم من ذلك 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']); قبل إعداد البيانات.

كل شيء يعمل بشكل رائع!

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى magento.stackexchange
scroll top