Как разбить на две таблицы в Zend Framework - PullRequest
4 голосов
/ 23 января 2011

Книги имеют следующие поля

  • book_id
  • book_name
  • book_auther
  • book_pub_date

таблица категорий содержит

  • category_id
  • category_name

таблица размещения имеет

  • PLACEMENT_ID
  • placement_category_id (FK)
  • placement_book_id (FK)

Теперь мы хотим использовать нумерацию страниц в контроллере индекса, чтобы выбрать книги с определенной категорией?
все таблицы находятся в одной базе данных


Примечание. Я разделил модель для каждой таблицы, и все таблицы связаны друг с другом с помощью $ _referenceMap
Я использую $ adapter = new Zend_Paginator_Adapter_DbTableSelect ($ select);
вопрос: как сделать $ select?

Ответы [ 2 ]

3 голосов
/ 24 января 2011

Между книгами и категориями существует отношение «многие ко многим», а таблица размещения - это таблица пересечений. Таким образом, я думаю, что один из способов создать ваш $ select - использовать внутреннее соединение следующим образом:

    $placementModel = new Your_Model_Table_Placement();

    $select = $placementModel->select(Zend_Db_Table::SELECT_WITH_FROM_PART)->setIntegrityCheck(false);
    $select->joinInner('BOOKS', 'BOOKS.book_id = PLACEMENT.placement_book_id');
    $select->where('PLACEMENT.placement_category_id = ?', $categoryID);

    $adapter = new Zend_Paginator_Adapter_DbTableSelect($select);

    // check the result if they are what you expect
    var_dump($adapter->getItems(0, 5)->toArray());

Конечно, имена таблиц и моделей должны соответствовать вашим реальным именам. Другим способом было бы создать представление в вашей базе данных. Тогда вы создадите модель для вида. Это сделает $ select короче.

0 голосов
/ 23 января 2011

Вы можете использовать этот класс разбиения на страницы:

http://www.catchmyfame.com/2007/07/28/finally-the-simple-pagination-class/

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

...