我正在创建一个这样的模型对象: $object1 = new Object1(); 数据库中有一个名为 object1s 的表。Object1 类是一个扩展 DataMapper 的空类。这没有问题。我能够保存数据,并从数据库中检索数据(我可以使用单独的数据库客户端查看它)。
我尝试对另一个对象(和不同的表)做同样的事情,例如,$object2 = new Object2(); 这次我收到以下错误消息:
致命错误:在第 6049 行的 /Applications/XAMPP/xamppfiles/htdocs/c/application/libraries/Datamapper.php 中的非对象上调用成员函数 line()
第 6049 行如下所示:
返回 $this->lang->line($key);
当我实例化 Object1 时,此时 $this->lang 被设置为 DM_Lang 的一个实例,但在实例化第二个对象时,$this->lang 被设置为“en”。两者之间的唯一区别是名称和数据库表。
我能做些什么来解决这个问题?为什么它们不同?$this->lang 设置在哪里(我已经使用调试器逐步完成但找不到它)?
数据库是 MySQL。我在 MacOSX Lion 上运行它是为了开发目的。网络服务器是 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 附带的安装说明进行操作。在加载 CodeIgniter 引导文件之前,我的 index.php 文件包含以下内容。
/* --------------------------------------------------------------------
* LOAD THE DATAMAPPER BOOTSTRAP FILE
* --------------------------------------------------------------------
*/
require_once APPPATH.'third_party/datamapper/bootstrap.php';
它与 Movie 对象配合得非常顺利。我能够向其中写入数据并使用单独的 SQL 查询工具验证它是否存在。
我刚刚注意到,如果“$movie = ...”行被注释掉,“$image = ...”行运行没有错误。但是,我需要它们两者才能使我的应用程序正常运行。
我正在使用 CI_VERSION=2.1.0。
谢谢您的帮助。