2011-06-03 3 views
1

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

$db->select()

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

Есть ли способ обхода проблемы?

редактировать:

Heres является примером:

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

таблица ошибки столбцы ID, bugname, AuthorID

второй таблице:

стол авторы колонны ID, AUTHORNAME

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

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

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

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

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

Jan

+0

Извините, но не ясно, что вы хотите сделать. Можете ли вы привести пример того, чего вы хотите достичь? – Marcin

+0

В этой ситуации я бы создал метод (например, fetchAllOrderedByAuthor) в Model_Bugs, который выполнил бы объединение и вернул правильно отсортированный набор строк. Я думаю, вы не можете сделать это, используя простой метод fetchAll. – Marcin

+0

Это возможно, но вы не можете присоединяться к zend_db_table, вам нужно сделать выбор с помощью zend_db_select следующим образом: '$ select = $ db-> select() -> from (array ('p' => 'products') , array ('product_id', 'product_name')) -> join (array ('l' => 'line_items'), 'p.product_id = l.product_id', array()); // пустой список столбцов. Но тогда вы не можете использовать методы, определенные в классе, расширяющем Zend_Db_Table_Row_Abstract, из-за результата. –

ответ

0

Я хотел бы добавить метод в 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. Это беспощадно, но это может сработать.