Я использую Zend_Db в одном из моих проектов. Теперь у меня возникла проблема, что внезапно во время выполнения кода переменная $ _db в Zend_Db_Adapter_Abstract имеет значение NULL. (показано var_dump ($ this), в моем классе DbTable_xx).
Кажется, что адаптер установлен на нуль где-то во время выполнения скрипта. Как это может произойти?
К сожалению, проект слишком сложный, чтобы разместить здесь некоторый код … Я получаю эту ошибку (при выполнении метода find ($ primary) на Zend_Db_Adapter_Abstract):
Fatal error: Call to a member function quoteTableAs() on a non-object in xxx/library/Zend/Db/Table/Abstract.php on line 1162
Вероятно, вы забыли установить адаптер Db для вашего класса Zend_Db_Table.
Вы можете сделать это, по крайней мере, тремя способами:
Установите по умолчанию для всех таблиц по умолчанию:
Zend_Db_Table_Abstract::setDefaultAdapter($db);
Укажите адаптер для конструктора таблицы:
$table = new MyTable( array('db'=>$db) );
Сохраните адаптер в реестре и укажите его в таблице или установите его как значение по умолчанию:
Zend_Registry::set('my_db', $db); $table = new MyTable( array('db'=>'my_db') ); // alternatively: Zend_Db_Table_Abstract::setDefaultAdapter('my_db');
См. http://framework.zend.com/manual/en/zend.db.table.html#zend.db.table.constructing
Ну, это не слишком много информации. Если вы хотите избежать угадывания, я бы предложил сделать копию Zend Framework и добавить некоторый код трассировщика к тем методам, которые могут устанавливать $ _db, используя встроенные функции отладки php, такие как:
чтобы узнать, что происходит. Afer все, это open-soure!