3

fetchAll在zend中有一个功能:

public function fetchAll($where = 1, $order = null, $limit = null, $group = null, array $fields = null)
{
    $where = (null == $where) ? 1 : $where;


    $fields = (!isset($fields)) ? '*' : $fields;

    $select = $this->db->select()
                       ->from("table", $fields)
                       ->where($where)
                       ->order($order)
                       ->group($group)
                       ->limit($limit, $offset);
    echo $select; exit;
    $result = $this->db->fetchAll($select);
    return $this->getResultObjects($result);
}

我可以调用这个函数$this->fetchAll('field = 1', null, 10)

我可以$order to null并且查询可以正常工作,但$group由于某种原因不能。

我怎样才能做到这一点,以便该组是可选的,并且只有当我坐在某个东西上时才进入?

谢谢

4

2 回答 2

4

这些方法是链接的,因此您可以将其拆分:

$select = $this->db->select()
  ->from("table", $fields)
  ->where($where);
  ->order($order)
  ->limit($limit, $offset);

if ($group) { 
  $select->group($group);
}

$result = $this->db->fetchAll($select);
return $this->getResultObjects($result);

链中的每个方法(fromwhereorder等)都返回一个Zend_Db_Select. 因此,每次您调用其中一个方法时,您都可以立即从同一个类中调用另一个方法。

这些代码块是相同的:

// With chaining

$select = $this->db->select()
  ->from("table", $fields)
  ->where($where);
  ->order($order)
  ->limit($limit, $offset);

// No chaining

$select = $this->db->select();
$select = $select->from("table", $fields);
$select = $select->where($where);
$select = $select->order($order);
$select = $select->limit($limit, $offset);

您可以看到为什么首选链接。注意:$select =在非链示例中,赋值 ( ) 大多是多余的,我只是将其保留以显示笨拙。

于 2012-05-30T22:05:59.500 回答
2

你可以这样做:

$select = $this->db->select()
                   ->from("table", $fields)
                   ->where($where)
                   ->order($order)
                   ->limit($limit, $offset);

if(!empty($group)){
    $select->group($group)
}

这是有效的,因为教义不会在您调用 execute 时执行您的查询。所以在那之前你可以继续构建查询。

哦,我以为你的问题是关于教义的。但是显然它与 ZendDb 以类似的方式工作。请参阅迈克 B 的答案。

于 2012-05-30T22:06:30.410 回答