Использование нескольких таблиц в Zend-модели и возврат комбинированного набора результатов - PullRequest
3 голосов
/ 07 января 2009

Привет Это очень специфическая или очень общая очередь - я не уверен, и я новичок в Zend Framework / OO в целом. Пожалуйста, будьте терпеливы, если это глупый вопрос ...

Во всяком случае, я хочу создать модель, которая делает что-то вроде:

Read all the itmes from a table 'gifts' into a row set

for each row in the table, read from a second table which shows how many have been bought, the append this as another "field" in the returned row

return the row set, with the number bought included.

Большинство простых примеров Zend, кажется, используют только одну таблицу в модели, но мое чтение, кажется, предполагает, что я должен выполнять большую часть работы там, а не в контроллере. Если это слишком общий вопрос, любой пример модели, которая работает с 2 таблицами и возвращает массив, был бы великолепен!

спасибо за вашу помощь заранее!

Ответы [ 2 ]

2 голосов
/ 23 января 2009

Я предполагаю, что вторые таблицы - это что-то вроде "gift_order" или что-то в этом роде.

В этом случае вам нужно указать отношения таблиц между "gift" и "gift_order" через внешние ключи и описать их в классе таблицы.

It will look like this

    class GiftOrder extends Zend_Db_Table_Abstract
    {
    /** Table name */
    protected $_name    = 'gif_order';
    protected $_referenceMap = array(
    "Fileset" =>array(
        "columns" => array("gifId"),
        "refTableClass" => "Gift",
        "refColumns" => array("id")
    ));
      ........................

You need to specify foreigh key constraint while create table with SQL
      ALTER TABLE `gift_order`
  ADD CONSTRAINT `order_to_gift` FOREIGN KEY (`giftId`) REFERENCES `gift` (`id`) ON DELETE CASCADE;

Если это то, что вы ищете, вы можете найти более подробную информацию по этой ссылке ссылка http://framework.zend.com/manual/en/zend.db.table.relationships.html

С таким решением вы сможете зацикливать подарки и получать их заказы без каких-либо сложных SQL

$ rowSetGifts = $ this-> findGifts ();

while($rowSetGifts->next()){
   $gift = $rowSetGifts->current();
   $orders = $gift->findGiftOrder();//This is magick methods, this is the same $gift->findDependentRowset('GiftOrder');

// Теперь вы можете что-то делать с заказами - считать ($ orders), зацикливать их или редактировать

}

1 голос
/ 07 января 2009

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

public function getGiftWithAdditionalField($giftId) {
  $select = $this->getAdapter()->select()
    ->from(array('g' => 'gifts'))
    ->joinLeft(array('table2' => 't2'), 'g.gift_id = t2.gift_id', array('field' => 'field'))
    ->where('g.gift_id = ?', $giftId);
  return $this->getAdapter->fetchAll($select);
}

Для получения дополнительной информации вы можете проверить Документы Zend Framework по объединениям .

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