0

好的,我对 Zend 来说还是新手,并且试图找出 ORM 的一般工作原理似乎是一项艰巨的任务(任何人都知道他们在哪里有专门的文档)。除了我想要做的是获取现有查询并向其添加“AND”子句。只是不知道该怎么做,就像我在其他地方找到的例子一样,看起来不像这个,我宁愿避免破坏

$select = $this->select()
            ->from('offer_term')
            ->setIntegrityCheck(false)
            ->joinUsing('term_mapping', 'term_id')
            ->where('promo_id = ?', $promo_id);
        return $this->fetchAll($select);
4

2 回答 2

1

尝试:

$select = $this->select()
    ->from('offer_term')
    ->setIntegrityCheck(false)
    ->joinUsing('term_mapping', 'term_id')
    ->where('promo_id = ?', $promo_id);
    ->where('name = ?', $name); // WHERE promo_id = $promo_id AND name = $name
return $this->fetchAll($select);

并记得使用手册

于 2012-06-29T20:16:42.353 回答
1

实际上,一旦您开始了解 Zend_db 的工作原理,这真的很容易。

您的查询:

$select = $this->select()
            ->from('offer_term')
            ->setIntegrityCheck(false)
            ->joinUsing('term_mapping', 'term_id')
            ->where('promo_id = ?', $promo_id);
        return $this->fetchAll($select);

您已经在使用该select()对象来执行查询,因此请尝试重构为这样的内容(我还将介绍如何使用条件进行操作):

$select = $this->select()->setIntegrityCheck(false);
$select->from('offer_term');//if query is inside of a DbTable model the from() can be omitted
$select->joinUsing('term_mapping', 'term_id');
$select->where('promo_id = ?', $promo_id);//Every time you add a where(), select() adds the param using the AND operator
$select->where('something_new = ?', $new_param);//if you need to add a param using OR you can use the orWhere() method.
if (TRUE) {
    $select->orWhere('something = ?',$parameter);//This will add an OR WHERE to the query if the condition is true.
}
return $this->fetchAll($select);

在查询中添加ANDselect()只需将另一个添加where()到链中即可。这可以通过链接您的原始查询或通过使用单独的语句来完成,就像我所做的那样。如果您需要在查询中使用ORselect()运算符,您可以使用该orWhere()方法。

您可以根据需要混合使用链接和单独的语句,这使得添加条件非常容易。

注意: Zend_Db 不是 ORM,它是表网关和表行模式的实现(我希望我的名字是正确的)。所以请不要期望完整的 ORM 功能。

希望这可以帮助。

于 2012-06-30T07:42:12.983 回答