Упорядочить набор строк Zend_Db_Table по ссылочному столбцу - PullRequest
1 голос
/ 03 июня 2011

я знаю, что могу определить отношения через _referenceMap, я знаю, что я могу выбрать соединение через

$db->select()

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

Есть ли какое-то решение, чтобы это сделать?

edit:

вот пример:

первая таблица:

таблица ошибки столбцы идентификатор , ошибка , authorid

вторая таблица:

таблица авторы столбцы id , имя автора

У меня есть модель Model_Bugs extends Zend_Db_Table_Abstract

Я хочу сделать что-то вроде этого:

$model->fetchAll($model->select()->order('authorname ASC'))

Это означает, что мне нужно объединить таблицыи сортировка по столбцу, которого нет в таблице моделей.

спасибо за помощь

Ян

1 Ответ

0 голосов
/ 13 июля 2011

Я бы добавил метод в Model_Bugs примерно так:

public function fetchBugsByAuthorname() {

    $bugTable = $this;
    $bugTableName = $this->info('name');
    $authorsTable = new Model_Authors();
    $authorsTableName = $authorsTable->info('name');

    $select = $bugTable->select()
        ->setIntegrityCheck(false)
        ->from($bugTable, array('id', 'bugname', 'authorid'))
        ->join($authorsTableName, 
            "$bugTableName.authorid = $authorsTableName.id", 
            array("authorname"))
        ->order("$authorsTableName.authorname asc");
    $result = $bugTable->fetchAll($select);

    return $result;
}

Но для этого вам нужно отключить проверку целостности таблицы ZF (setIntegrityCheck(false) выше), что означает, что вы не сможете напрямую вызывать save() в результирующих строках. Но если он предназначен только для чтения, он будет работать.

Если вам необходимо сохранить наборы строк обратно в базу данных, вам, возможно, придется сначала выбрать идентификаторы авторов из Model_Authors в том порядке, в котором вы хотите, а затем изменить порядок запроса Model_Bugs соответственно. Это грязнее, но может работать.

...