嗨这是一个非常具体或非常通用的问题 - 我不确定,我一般都是Zend框架/ 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个表并返回数组的模型的任何示例都会很棒!
感谢您的帮助!
答案 0 :(得分:2)
我假设第二个表是“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;
如果这是您要找的内容,可以在此链接link 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 :(得分:1)
我建议您在礼品模型类中创建一个返回所需内容的函数。它可能看起来像:
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 Docs on Joins了解详情。