Zend Framework модель отношений и доступ к связанным записям - PullRequest
0 голосов
/ 21 февраля 2011

У меня есть модель Zend Framework:

class User extends Zend_Db_Table_Abstract {
    protected $_name    = 'users';
    protected $_primary = 'id';
    protected $_dependentTables = array('UserItem');

    public function refresh($) {
        $items = $this->findDependentRowset('UserItem', 'items');
            // do stuff with each item
        print_r($items);
        die();
    }
}

У меня также есть связанная модель:

<?php
class UserItem extends Zend_Db_Table_Abstract
{
    protected $_name = 'user_items';
    protected $_referenceMap    = array(
        'items' => array(
            // user_id is the name of the field on the USER_ITEMS table
            'columns'           => 'user_id',
            'refTableClass'     => 'User',
            // id is the name of the field on the USERS table
            'refColumns'        => 'id'
        )
    );
}

?>

Я бы хотел, чтобы я мог позвонить User->refresh(); и сделать так, чтобы случился какой-то необычный стэк. Но ошибка

 Fatal error: Call to undefined method FbUser::findDependentRowset() 

Что говорит мне о том, что хотя я думаю я делаю это правильно в соответствии с документацией Zend http://framework.zend.com/manual/en/zend.db.table.relationships.html Я что-то упускаю.

Если это имеет значение, то при первом запуске список элементов будет пустым, затем я "добавлю" целую кучу элементов - в будущих прогонах я сравню все элементы, только обновлю те, которые отличаются. Хм ... Нет, это определенно не актуально:)

1 Ответ

2 голосов
/ 21 февраля 2011

У вас смешанные классы. У вас должно быть 2 класса для каждой сущности: EntityTable (ваш шлюз таблицы) и Entity (ваш шлюз строки). поэтому объявления классов должны выглядеть примерно так:

class User extends Zend_Db_Table_Row

class FbUser extends User

class UserTable extends Zend_Db_Table_Abstract

class UserItem extends Zend_Db_Table_Row

class UserItemTable extends Zend_Db_Table_Abstract

Классы строк - это ваши модели (или они связаны с моделями в зависимости от того, как вы хотите их подключить), а не классы таблиц.

Метод findDependentRowset находится в классе Zend_Db_Table_Row, поэтому вы получаете сообщение об ошибке ... вы каким-то образом расширили неверный класс.

В некотором смысле я имею в виду, что определения вашей таблицы верны, но вы пытаетесь использовать экземпляры таблицы как строки. Вы можете либо добавить / изменить использование класса, как предложено выше, либо передать экземпляр пользователя wor классу таблицы в качестве аргумента для обновления:

public function refresh(Zend_Db_Table_Row $user)
{
   $items = $user->findDependentRowset('UserItem', 'items');
   // do stuff with each item
   print_r($items);
   die();
}
...