ошибка zend db при переключении таблиц Перехватываемая фатальная ошибка: аргумент 1, переданный в __construct(), должен быть массивом, заданным объектом, вызванным в

В моем приложении я установил соединение с БД. Теперь я хочу переключить столы, и я продолжаю получать следующую ошибку

Catchable fatal error: Argument 1 passed to Application_Model_PgeSeismicFile::__construct() must be an array, object given, called in /opt/eposdatatransfer/application/models/PgeSeismicFileMapper.php on line 58 and defined in /opt/eposdatatransfer/application/models/PgeSeismicFile.php on line 10 

У меня есть две модели для двух столов. я получаю сообщение об ошибке, когда пытаюсь получить доступ ко второй таблице. Доступ и настройка 1-й таблицы в порядке, и я делаю это так же. Вот как я переключаю столы.

private $_dbTable = null;

    public function setDbTable($dbTable, $path = false)
    {
        $project = $_REQUEST['username'];

        $filename = $path . "PSDB.db"; //APPLICATION_PATH . "/data/db/".$project."/PSDB.db";

        if (!file_exists($filename)) {
            //$this->_redirect('/');
            // need to redirect and pass eror message for user
            throw new Exception("File does not exist");
        }

        try{
            //exit("3");
            $dbAdapter = Zend_Db::factory("pdo_sqlite", array("dbname"=> $filename));
        }catch (Zend_Db_Adapter_Exception $e) {
            // perhaps a failed login credential, or perhaps the RDBMS is not running
            var_dump($e);
            exit("1");

        } catch (Zend_Exception $e) {
            // perhaps factory() failed to load the specified Adapter class
            var_dump($e);
            exit("2");
        }

        if (is_string($dbTable)) {
            print_r($dbAdapter);
            $dbTable = new $dbTable($dbAdapter);
            $dbTableRowset = $dbTable->find(1);
            $user1 = $dbTableRowset->current();
            //var_dump($user1);
            //exit("hello");
            //$row = $user1->findDependentRowset();
        }
        if (!$dbTable instanceof Zend_Db_Table_Abstract) {
            throw new Exception('Invalid table data gateway provided');
        }
        $this->_dbTable = $dbTable;
        //$session = new Zend_Session_Namespace();
        //$session->dbAdapter = $this->_dbTable;
        //var_dump($this);
        //exit();
        return $this;
    }

    public function getDbTable($path = false)
    {
        if (null === $this->_dbTable) {
            $session = new Zend_Session_Namespace();
            //$this->setDbTable('Application_Model_PgeSeismicFile',$path);
            $this->dbTable = new Application_Model_PgeSeismicFile($session->dbAdapter);
        }
        return $this->_dbTable;
    }

В этой строке ошибки

$this->dbTable = new Application_Model_PgeSeismicFile($session->dbAdapter);

В моем сеансе я храню:

$dbAdapter = Zend_Db::factory("pdo_sqlite", array("dbname"=> $filename));

person shorif2000    schedule 28.06.2012    source источник
comment
Какая часть сообщения об ошибке вам непонятна?   -  person hakre    schedule 28.06.2012
comment
где ему нужно передать массив, а не объект. В первый раз, когда я обращаюсь к таблице, она передает объект, так почему во второй раз она не работает? Ниже представлена ​​моя модель сейсмического файла public function __construct(array $options = null) { if (is_array($options)) { $this->setOptions($options); } }.   -  person shorif2000    schedule 28.06.2012
comment
Переменные не являются константами, они могут изменять свое значение с течением времени.   -  person hakre    schedule 28.06.2012
comment
Я думаю, что ошибка говорит о том, что все конструктор не перегружен и нуждается в массиве (конфигурации) в качестве первого аргумента. Вы передали объект (Zend_Db_Table)   -  person burntblark    schedule 28.06.2012
comment
Теперь я понимаю. Я изменил параметр для передачи: array("dbname"=> $filename), где имя файла указывает на путь к файлу sqlite. Но чего я не понимаю, так это того, как при первой загрузке соединения sqlite с таблицей я могу передать объект.   -  person shorif2000    schedule 28.06.2012


Ответы (1)


попробуй это

$dbAdapter = Zend_Db::factory("pdo_sqlite", array("dbname"=> $filename));

Zend_Db_Table::setDefaultAdapter($dbAdapter);

$this->dbTable = new Application_Model_PgeSeismicFile;
person Mircea Soaica    schedule 04.04.2013