/**
  * Second step. Create where conditions in Doctrine style. This
  * method groups the subfields together:
  *  e.g.: a[0]=1, b[0]=2, a[1]=2, b[1]=5 => (a=1 and b=2) OR (a=2 and b=5)
  * This is needed for custom vars or any other multifield confitions
  * @param Doctrine_Collection $values
  * @param Doctrine_Query_Abstract $query
  * @param unknown_type $alias
  */
 private function createConditions(Doctrine_Collection $values, Doctrine_Query_Abstract $query, $alias)
 {
     $arrayStatements = array();
     $arrayValues = array();
     foreach ($values as $value) {
         $k = $value->tv_key;
         $v = $value->tv_val;
         if (!array_key_exists($k, $this->fields)) {
             continue;
         }
         if (!array_key_exists($k, $arrayStatements)) {
             $arrayStatements[$k] = array();
         }
         if (!array_key_exists($k, $arrayValues)) {
             $arrayValues[$k] = array();
         }
         $arrayStatements[$k][] = sprintf('%s.%s=?', $alias, $this->fields[$k]);
         $arrayValues[$k][] = $v;
     }
     $stateOut = array();
     $stateVal = array();
     while (true) {
         $stmtTmp = array();
         foreach ($this->fields as $fid => $fname) {
             if (count($arrayStatements[$fid]) && count($arrayValues[$fid])) {
                 $stmtTmp[] = array_shift($arrayStatements[$fid]);
                 $stateVal[] = array_shift($arrayValues[$fid]);
             } else {
                 break 2;
             }
         }
         $stateOut[] = '(' . implode(' and ', $stmtTmp) . ')';
     }
     $statement = implode(' OR ', $stateOut);
     $query->andWhere($statement, $stateVal);
 }