3

私はfetchAllzendに関数を持っています:

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);

チェーン内のすべてのメソッド(、、、fromなど)はwhereorderのインスタンスを返しますZend_Db_Select。したがって、これらのメソッドの1つを呼び出すたびに、同じクラスからの別のメソッド呼び出しですぐにフォローアップできます。

これらのコードブロックは同一です。

// 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)
}

これは、doctrineがexecuteを呼び出してクエリを実行しないために機能します。したがって、それまではクエリを作成し続けることができます。

ドー、あなたの質問はドクトリンに関するものだと思いました。しかし、ええ、どうやらそれはZendDbと同じように機能します。マイクBの答えを参照してください。

于 2012-05-30T22:06:30.410 に答える