CodeIgniter DataMapper ORM 无法实例化模型对象


CodeIgniter DataMapper ORM unable to instantiate model object

我正在创建一个这样的模型对象:$object 1 = new Object1((; 数据库中有一个名为 object1s 的表。 Object1 类是扩展 DataMapper 的空类。 这没有问题。 我能够保存数据,并从数据库中检索数据(我可以使用单独的数据库客户端查看它(。

我尝试对另一个对象(和不同的表(进行相同的操作,例如,$object 2 = new Object2((; 这次我收到以下错误消息:

致命错误:调用/Applications/XAMPP/xamppfiles/htdocs/c/application/libraries/Datamapper.php 第 6049 行的非对象上的成员函数 line((

第 6049 行如下所示:

返回 $this->朗->线($key(;

当我实例化 Object1 时,此时$this->lang 设置为DM_Lang的实例,但是当实例化第二个对象时,$this->lang 设置为"en"。 两者之间的唯一区别是名称和数据库表。

我该怎么做才能解决这个问题? 它们为什么不同? 在哪里设置 $this->lang(我已经使用调试器逐步完成并且找不到它(?

数据库是MySQL。 我出于开发目的在MacOSX Lion上运行它。 网络服务器是阿帕奇。我正在使用数据映射器 ORM v1.8.2。


有一条评论要求确切的代码。 这是我测试的完整确切代码(我从每个文件复制并粘贴(。

对象 1 称为 Movie, models/movie.php:

<?php
class Movie extends DataMapper {
}

对象 2 称为图像、模型/图像.php:

<?php
class Image extends DataMapper {
}
控制器

看起来像这样,控制器/测试.php:

<?php
class Test extends CI_Controller {
    public function newdata()
    {
        // The following line runs as expected
        $movie = new Movie();
        // The following line fails with the Fatal error mentioned above
        $image = new Image();
    }
}

我按照 DataMapper v1.8.2 附带的安装说明进行操作。 我的索引.php文件在加载 CodeIgniter 引导程序文件之前包含以下内容。

/* --------------------------------------------------------------------
 * LOAD THE DATAMAPPER BOOTSTRAP FILE
 * --------------------------------------------------------------------
 */
        require_once APPPATH.'third_party/datamapper/bootstrap.php';

它与 Movie 对象配合使用非常流畅。 我能够将数据写入其中并使用单独的SQL查询工具验证它是否存在。

我刚刚注意到"$image = ..."如果"$movie = ..."行被注释掉。 但是,我需要它们来使我的应用程序正常运行。

我正在使用 CI_VERSION=2.1.0。

谢谢你的帮助。

在切换到 CodeIgniter 之前,已使用数据库架构。 第一个表存在名称冲突(它使用"lang"作为字段名称(。第二个表没有冲突,并且失败只是因为它是下一个 DataMapper 子类实例化,位于有问题的模型对象之后。我的注意力集中在失败的桌子/模型上,而实际上,成功者有问题。

解决方法是检查所有模型对象是否存在冲突,而不仅仅是失败的对象。