RError.com

RError.com Logo RError.com Logo

RError.com Navigation

  • 主页

Mobile menu

Close
  • 主页
  • 系统&网络
    • 热门问题
    • 最新问题
    • 标签
  • Ubuntu
    • 热门问题
    • 最新问题
    • 标签
  • 帮助
主页 / 问题 / 552318
Accepted
Maybe_V
Maybe_V
Asked:2020-08-05 21:07:21 +0000 UTC2020-08-05 21:07:21 +0000 UTC 2020-08-05 21:07:21 +0000 UTC

Magento 1.9 模型中的错误

  • 772

不知道是什么原因保存模型时出现错误:

致命错误:调用布尔值上的成员函数 beginTransaction()

该模型如下所示:

class Brain_CrownCaliber_Model_Processcrown extends Mage_Core_Model_Abstract
{
    protected function _construct()
    {
       $this->_init('brain_crowncaliber/crown_caliber_process');
    }

    public function addProductToCrown($idArray)
    {
        foreach ($idArray as $id) {
            $this->setData('product_id', $id);
        }
        Mage::app()->setCurrentStore(Mage_Core_Model_App::ADMIN_STORE_ID);
        $this->save();
    }

}

我注册它config.xml:

<models>
            <brain_crowncaliber>
                <class>Brain_CrownCaliber_Model</class>
                <resourceModel>brain_crowncaliber_resource</resourceModel>
            </brain_crowncaliber>
</models>

可能是什么问题呢?我什至不知道我在这里做错了什么。

资源部分:

<brain_crowncaliber_resource>
                    <class>HexBrain_CrownCaliber_Model_Resource</class>
                    <entities>
                        <crown_caliber_process>
                            <table>crown_caliber_process</table>
                        </crown_caliber_process>
                    </entities>
</brain_crowncaliber_resource>

资源模型

class Brain_CrownCaliber_Model_Resource_Processcrown extends Mage_Core_Model_Resource_Db_Abstract
{

    protected function _construct()
    {
        $this->_init('brain_crowncaliber/crown_caliber_process', 'process_id');
    }
}
php
  • 1 1 个回答
  • 10 Views

1 个回答

  • Voted
  1. Best Answer
    Naumov
    2020-08-08T15:26:08Z2020-08-08T15:26:08Z

    我会将其格式化为答案,因为评论不允许正常格式化

    这是文件app/code/core/Mage/Core/Model/Config.php第 1349 行中的方法

    /**
     * Get model class instance.
     *
     * Example:
     * $config->getModelInstance('catalog/product')
     *
     * Will instantiate Mage_Catalog_Model_Mysql4_Product
     *
     * @param string $modelClass
     * @param array|object $constructArguments
     * @return Mage_Core_Model_Abstract|false
     */
    public function getModelInstance($modelClass='', $constructArguments=array())
    {
        $className = $this->getModelClassName($modelClass);
        if (class_exists($className)) {
            Varien_Profiler::start('CORE::create_object_of::'.$className);
            $obj = new $className($constructArguments);
            Varien_Profiler::stop('CORE::create_object_of::'.$className);
            return $obj;
        } else {
            return false;
        }
    }
    

    做点什么var_dump($className),看看是什么类名形成的,很有可能是错的。我们进一步研究该方法getModelClassName(),通常我们会到达同一文件的方法 1219 。getGroupedClassName()

     /**
         * Retrieve class name by class group
         *
         * @param   string $groupType currently supported model, block, helper
         * @param   string $classId slash separated class identifier, ex. group/class
         * @param   string $groupRootNode optional config path for group config
         * @return  string
         */
        public function getGroupedClassName($groupType, $classId, $groupRootNode=null)
        {
            if (empty($groupRootNode)) {
                $groupRootNode = 'global/'.$groupType.'s';
            }
    
            $classArr = explode('/', trim($classId));
            $group = $classArr[0];
            $class = !empty($classArr[1]) ? $classArr[1] : null;
    
            if (isset($this->_classNameCache[$groupRootNode][$group][$class])) {
                return $this->_classNameCache[$groupRootNode][$group][$class];
            }
    
            $config = $this->_xml->global->{$groupType.'s'}->{$group};
    
            // First - check maybe the entity class was rewritten
            $className = null;
            if (isset($config->rewrite->$class)) {
                $className = (string)$config->rewrite->$class;
            } else {
                /**
                 * Backwards compatibility for pre-MMDB extensions.
                 * In MMDB release resource nodes <..._mysql4> were renamed to <..._resource>. So <deprecatedNode> is left
                 * to keep name of previously used nodes, that still may be used by non-updated extensions.
                 */
                if ($config->deprecatedNode) {
                    $deprecatedNode = $config->deprecatedNode;
                    $configOld = $this->_xml->global->{$groupType.'s'}->$deprecatedNode;
                    if (isset($configOld->rewrite->$class)) {
                        $className = (string) $configOld->rewrite->$class;
                    }
                }
            }
    
            // Second - if entity is not rewritten then use class prefix to form class name
            if (empty($className)) {
                if (!empty($config)) {
                    $className = $config->getClassName();
                }
                if (empty($className)) {
                    $className = 'mage_'.$group.'_'.$groupType;
                }
                if (!empty($class)) {
                    $className .= '_'.$class;
                }
                $className = uc_words($className);
            }
    
            $this->_classNameCache[$groupRootNode][$group][$class] = $className;
            return $className;
        }
    

    此方法的作用是从配置中获取常规部分中指定的类前缀名称models,在您看到生成的类名称后,您就会明白错误在哪里。但根据经验,我会说配置中的某处有错字。原则上,CO 上的编辑版本应该可以工作。

    • 1

相关问题

Sidebar

Stats

  • 问题 10021
  • Answers 30001
  • 最佳答案 8000
  • 用户 6900
  • 常问
  • 回答
  • Marko Smith

    如何停止编写糟糕的代码?

    • 3 个回答
  • Marko Smith

    onCreateView 方法重构

    • 1 个回答
  • Marko Smith

    通用还是非通用

    • 2 个回答
  • Marko Smith

    如何访问 jQuery 中的列

    • 1 个回答
  • Marko Smith

    *.tga 文件的组重命名(3620 个)

    • 1 个回答
  • Marko Smith

    内存分配列表C#

    • 1 个回答
  • Marko Smith

    常规赛适度贪婪

    • 1 个回答
  • Marko Smith

    如何制作自己的自动完成/自动更正?

    • 1 个回答
  • Marko Smith

    选择斐波那契数列

    • 2 个回答
  • Marko Smith

    所有 API 版本中的通用权限代码

    • 2 个回答
  • Martin Hope
    jfs *(星号)和 ** 双星号在 Python 中是什么意思? 2020-11-23 05:07:40 +0000 UTC
  • Martin Hope
    hwak 哪个孩子调用了父母的静态方法?还是不可能完成的任务? 2020-11-18 16:30:55 +0000 UTC
  • Martin Hope
    Qwertiy 并变成3个无穷大 2020-11-06 07:15:57 +0000 UTC
  • Martin Hope
    koks_rs 什么是样板代码? 2020-10-27 15:43:19 +0000 UTC
  • Martin Hope
    user207618 Codegolf——组合选择算法的实现 2020-10-23 18:46:29 +0000 UTC
  • Martin Hope
    Sirop4ik 向 git 提交发布的正确方法是什么? 2020-10-05 00:02:00 +0000 UTC
  • Martin Hope
    Arch ArrayList 与 LinkedList 的区别? 2020-09-20 02:42:49 +0000 UTC
  • Martin Hope
    iluxa1810 哪个更正确使用:if () 或 try-catch? 2020-08-23 18:56:13 +0000 UTC
  • Martin Hope
    faoxis 为什么在这么多示例中函数都称为 foo? 2020-08-15 04:42:49 +0000 UTC
  • Martin Hope
    Pavel Mayorov 如何从事件或回调函数中返回值?或者至少等他们完成。 2020-08-11 16:49:28 +0000 UTC

热门标签

javascript python java php c# c++ html android jquery mysql

Explore

  • 主页
  • 问题
    • 热门问题
    • 最新问题
  • 标签
  • 帮助

Footer

RError.com

关于我们

  • 关于我们
  • 联系我们

Legal Stuff

  • Privacy Policy

帮助

© 2023 RError.com All Rights Reserve   沪ICP备12040472号-5