Я создаю объект модели следующим образом: $ object1 = new Object1(); Существует таблица в базе данных с именем object1s. Класс Object1 является пустым классом, который расширяет DataMapper. Это работает без проблем. Я могу сохранять данные и извлекать данные из базы данных (я вижу это с помощью отдельного клиента базы данных).CodeIgniter DataMapper ORM не удалось создать экземпляр объекта модели
Я попытался сделать то же самое с другим объектом (и другой таблицей), например, $ object2 = new Object2(); На этот раз я получаю следующее сообщение об ошибке:
Fatal error: Call to a member function line() on a non-object in /Applications/XAMPP/xamppfiles/htdocs/c/application/libraries/Datamapper.php on line 6049
Line 6049 выглядит следующим образом:
return $this->lang->line($key);
Когда я инстанцирован Object1, $ this-> Ланг был установлен на экземпляр DM_Lang в этой точке, но при создании экземпляра второго объекта $ this-> lang устанавливается значение "en". Единственное различие между ними - это имя и таблица базы данных.
Что можно сделать, чтобы исправить это? Почему они разные? Где устанавливается $ this-> lang (я уже прошел через отладчик и не могу его найти)?
База данных - это MySQL. Я запускаю это для разработки на MacOSX Lion. Веб-сервер - это apache. Я использую DataMapper ORM v1.8.2.
Был комментарий с точным кодом, о котором идет речь. Это полный точный код, который я тестировал с помощью (я скопировал и вставил из каждого файла).
Object1 называется фильм, модели/movie.php:
<?php
class Movie extends DataMapper {
}
Объект 2 называется изображение, модели/image.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();
}
}
I следуя инструкциям по установке, которые поставляются с DataMapper v1.8.2. Мой файл index.php включает следующее, прежде чем загружать файл начальной загрузки CodeIgniter.
/* --------------------------------------------------------------------
* LOAD THE DATAMAPPER BOOTSTRAP FILE
* --------------------------------------------------------------------
*/
require_once APPPATH.'third_party/datamapper/bootstrap.php';
Он работает совершенно плавно с объектом Кино. Я могу записать в него данные и убедиться, что он существует с помощью отдельного инструмента запросов SQL.
Я просто заметил, что строка «$ image = ...» работает без ошибок, если строка «$ movie = ...» закомментирована. Тем не менее, мне нужно, чтобы оба из них работали нормально.
Я использую CI_VERSION = 2.1.0.
Благодарим за помощь.
Я только что нашел проблему. Первая таблица имела конфликт имен (он использовал «lang» для имени поля). Вторая таблица не имела конфликтов и была неудачной только потому, что это был следующий экземпляр подкласса DataMapper, который появился после объекта с проблемой. Мое внимание было обращено на таблицу/модель, которая терпела неудачу, когда на самом деле это был тот, который преуспел в этой проблеме. – mdl
Ага, я вижу - вы переписали одно из [зарезервированных имен] (http://datamapper.wanwizard.eu/pages/reservednames.html). Я бы сказал, стоит ли автоответчику. –