Почему я получаю эту странную ошибку при работе с findDependantRowset и Zend Framework? - PullRequest
1 голос
/ 25 мая 2011

PHP выдает эту ошибку:

Fatal error: Call to a member function getAdapter() on a non-object in C:\Program Files\Zend\ZendServer\share\ZendFramework\library\Zend\Db\Table\Row\Abstract.php on line 869

... когда я вызываю этот код:

$item = $itemMapper->find(1); // Find item with id of 1     
$item->findDependentRowset("Application_Model_DbTable_SubItem");

У меня есть следующие другие классы:

models/DBTable/Item.php:

class Application_Model_DbTable_Item extends Zend_Db_Table_Abstract {
    /** Table name */
    protected $_name = 'items';
}

models/DBTable/SubItem.php:

class Application_Model_DbTable_SubItem extends Zend_Db_Table_Abstract {

    /** Table name */
    protected $_name = 'subitems';
    protected $_referenceMap = array(
        'Item' => array(
            'columns' => 'items_id',
            'refTableClass' => 'Application_Model_DbTable_Item',
            'refColumns' => 'items_id'
        )
    );

}

Насколько мне известно, все мои модели, картографы и таблицы базы данных настроены правильно. Доступ к модели через оболочку и fetchAll работает нормально.

Мои модели расширяются Zend_Db_Table_Row. Почему это дает мне эту ошибку?

FYI:

Строка, на которую ссылается сообщение об ошибке, выглядит следующим образом:

public function findDependentRowset($dependentTable, $ruleKey = null, Zend_Db_Table_Select $select = null){

    $db = $this->_getTable()->getAdapter(); // <<<< there it is
...

1 Ответ

1 голос
/ 26 мая 2011

Я понял это. Очевидно, я предполагал, что результатом find(), возвращенным моим классом mapper, был Zend_Db_Table_Row объект. Я даже пытался использовать instanceOf, чтобы проверить это, но я либо использовал его неправильно, либо он мне солгал.

Объект, возвращенный моим картографом, был просто моделью.

Вызов find() для объекта Application_Model_DbTable_Table возвращает набор строк, и current() работает в данный момент. После использования этого подхода мне удалось успешно набрать findDependentRowset().

...