Нумерация результатов поиска findManyToManyRowset - PullRequest
0 голосов
/ 13 августа 2010

У меня есть две таблицы базы данных (давайте назовем их A и B) с таблицей мостов многие-ко-многим (AB).Я написал модели Zend_Db_Table для всех трех таблиц.

У меня есть объект A_Row, который я извлек из базы данных, используя, например, метод Zend_Db_Row :: find.Теперь мне нужно распечатать таблицу всех строк, которые связаны с этой строкой.Проблема в том, что мне нужно разбить эту таблицу на страницы, но она отображается с использованием метода B_Rowset.

Я вижу два варианта (если я хочу использовать Zend_Paginator)

1) Используйте Zend_Paginator_Adapter_Iterator для разбивки на страницы набора строк, возвращаемого findManyToManyRowset.Это будет выглядеть так:

$b_rowset = $a_row->findManyToManyRowset('B_Table', 'AB_Table');
$paginator = new Zend_Paginator(new Zend_Paginator_Adapter_Iterator($b_rowset));

Однако есть две проблемы:

a) Извлекается весь набор результатов (не только элементы на странице).

б) Я использую метод B_Rowset для рендеринга таблицы HTML, поэтому мне придется конвертировать результаты обратно в набор результатов.

Это решение кажется слишком уродливым.

2) Создайте Zend_Db_Table_Select вручную и используйте Zend_Paginator_Adapter_DbTableSelect.

Но создание многотабличных запросов с Zend_Db_Table_Select очень непросто (и результаты необходимо преобразовать в B_Rowset).Я, вероятно, в итоге получу около 50 строк грязного кода.

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

1 Ответ

0 голосов
/ 01 сентября 2010

Я пробовал оба из них, или, по крайней мере, 2, у меня было решение, которое было похоже на 1, которое использовало findDependentRowset().

Один. Работал хорошо.Было сложнее настроить и приступить к работе, но это означает, что запросы создаются для меня с меньшими трудностями, когда дело доходит до реализации.,Это обеспечивает большую гибкость и позволяет объединять таблицы только тогда, когда они вам нужны.Это хорошо работает и с зенд-пагинацией.Мое решение состояло в том, чтобы написать функции в моей модели, в которые я мог бы передать объект Zend_Db_Select, после чего функция в модели применила бы соединение к объекту Zend_Db_Select, аналогично следующему.* Это, конечно, не решение для всех, но оно дает мне то, что мне нужно.

Я написал «один» и «два» ранее, потому что правильный синтаксис списка, казалось, испортилподсветка кода

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