如何在zend框架中通过可选组创建组?

时间:2012-05-30 22:03:33

标签: php mysql zend-framework zend-db

我在zend中有一个fetchAll函数:

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

我怎样才能让小组成为可选的,只有当我坐在那里才能进入?

感谢

2 个答案:

答案 0 :(得分: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 =)在非链式示例中大部分是超级的,我只留下来显示笨重。

答案 1 :(得分:2)

您可以这样做:

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

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

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

是的,我认为你的问题是关于学说的。但是,显然它与ZendDb的工作方式类似。见Mike B的回答。