Zend Dd Rowset получает родительский ряд - PullRequest
1 голос
/ 31 марта 2010

Меня интересует использование абстракции в Zend Db RowSet вместо объединений, возможно ли это? например, я могу получить некоторую информацию из родительской таблицы, как здесь

/**
 * Get default photo info (path , description)
 */
public function getDefaultPhotoInfo($userdId){

    $select = $this->select($this)
            ->where('id=?', $userdId);
    $rowset = $this->fetchAll($select);
    $current = $rowset->current();

    $res = $current->findParentRow('UserPhotos', 'Avatar');
    if(isset($res)){
        return $res->toArray();
    }
}

Как я могу использовать абстракцию Rowset, чтобы эта логика работала

table( id, pic_path,) table_translation(id, table_id, lang_id, pic_title);

Выше приведено представление двух таблиц, идея состоит в том, чтобы получить информацию из обеих таблиц с указанием lang_id, это легко с соединениями, но можно ли сделать это с абстракцией Db Rowset?

1 Ответ

1 голос
/ 31 марта 2010

Просто для пояснения: при выполнении fetchAll для экземпляра Zend_Db_Table вы получаете Zend_Db_Table_Rowset, который реализует интерфейс Iterator. Таким образом, вызов current() для экземпляра Rowset вернет экземпляр Zend_Db_Table_Row.

Начиная с ZF1.10, вы определяете отношения между таблицами в экземпляре Zend_Db_Table_Defintion или в экземпляре конкретной таблицы, как описано в справочном руководстве для Zend_Db_Table Отношения . Поскольку руководство довольно подробное, я не буду воспроизводить это здесь.

Как только вы определили отношения, вы можете получить их из строки с помощью (пример 1 из руководства)

  $accountsTable = new Accounts();
  $accountsRowset = $accountsTable->find(1234);
  $user1234 = $accountsRowset->current();       
  $bugsReportedByUser = $user1234->findDependentRowset('Bugs');

или методами магического поиска.

Метод findParentRow() несколько отличается от этого, так как он возвращает полную строку зависимого набора строк из родительской строки.

Пример 5: В этом примере показано получение объекта Row из таблицы «Ошибки» (например, одна из этих ошибок со статусом «NEW») и поиск строки в таблице «Аккаунты» для пользователя, сообщившего об ошибке.

  $bugsTable = new Bugs();
  $bugsRowset = $bugsTable->fetchAll(array('bug_status = ?' => 'NEW'));
  $bug1 = $bugsRowset->current();
  $reporter = $bug1->findParentRow('Accounts');

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

См. Также связанные вопросы:

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...