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

时间:2012-05-11 21:48:20

标签: php mysql codeigniter orm codeigniter-datamapper

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

我尝试用另一个对象(和另一个表)做同样的事情,例如,$ object2 = new Object2();这次我收到以下错误消息:

  

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

第6049行看起来像这样:

  

返回$ this-> lang-> line($ key);

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

我该怎么做才能解决这个问题?他们为什么不同?设置$ this-> lang在哪里(我已经使用调试器进行了操作但无法找到它)?

数据库是MySQL。我正在MacOSX Lion上进行开发。 Web服务器是apache。我正在使用DataMapper ORM v1.8.2。


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

Object1被称为Movie,models / movie.php:

<?php

class Movie extends DataMapper {

}

对象2称为Image,models / image.php:

<?php

class Image extends DataMapper {

}

控制器看起来像这样,controllers / test.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附带的安装说明进行操作。我的index.php文件在加载CodeIgniter引导程序文件之前包含以下内容。

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

使用Movie对象可以很顺利地工作。我能够向它写入数据并使用单独的SQL查询工具验证它是否存在。

我刚注意到,如果“$ movie = ...”行被注释掉,“$ image = ...”行就会运行而没有错误。但是,我需要它们才能使我的应用程序正常运行。

我正在使用CI_VERSION = 2.1.0。

感谢您的帮助。

1 个答案:

答案 0 :(得分:2)

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

修复是检查所有模型对象是否存在冲突,而不仅仅是失败的模型对象。