/** * Map to database column. * @param string $column * @param string $operator * @return Filter * @throws Exception */ public function setColumn($column, $operator = Condition::OPERATOR_OR) { $columnAlreadySet = count($this->column) > 0; if (!Condition::isOperator($operator) && $columnAlreadySet) { throw new Exception('Operator must be Condition::OPERATOR_AND or Condition::OPERATOR_OR.'); } if ($columnAlreadySet) { $this->column[] = $operator; $this->column[] = $column; } else { $this->column[] = $column; } return $this; }
/** * Map to database column. * @param string $column * @param string $operator * @return Filter * @throws Exception */ public function setColumn($column, $operator = Condition::OPERATOR_OR) { $columnAlreadySet = count($this->column) > 0; if (!Condition::isOperator($operator) && $columnAlreadySet) { $msg = sprintf("Operator must be '%s' or '%s'.", Condition::OPERATOR_AND, Condition::OPERATOR_OR); throw new Exception($msg); } if ($columnAlreadySet) { $this->column[] = $operator; $this->column[] = $column; } else { $this->column[] = $column; } return $this; }
/** * @param Condition $condition * @param array $data * @return array */ protected function makeWhere(Condition $condition, array $data = NULL) { $data = $data === NULL ? $this->data : $data; return array_filter($data, function ($row) use($condition) { if ($condition->callback) { return call_user_func_array($condition->callback, [$condition->value, $row]); } $i = 0; $results = []; foreach ($condition->column as $column) { if (Condition::isOperator($column)) { $results[] = " {$column} "; } else { $i = count($condition->condition) > 1 ? $i : 0; $results[] = (int) $this->compare($row[$column], $condition->condition[$i], isset($condition->value[$i]) ? $condition->value[$i] : NULL); $i++; } } $result = implode('', $results); return count($condition->column) === 1 ? (bool) $result : eval("return {$result};"); }); }
/** * @param Condition $condition * @param \Doctrine\ORM\QueryBuilder $qb */ protected function makeWhere(Condition $condition, \Doctrine\ORM\QueryBuilder $qb = NULL) { $qb = $qb === NULL ? $this->qb : $qb; if ($condition->callback) { return callback($condition->callback)->invokeArgs(array($condition->value, $qb)); } $columns = $condition->column; foreach ($columns as $key => $column) { if (!Condition::isOperator($column)) { $columns[$key] = isset($this->filterMapping[$column]) ? $this->filterMapping[$column] : (Strings::contains($column, ".") ? $column : current($this->qb->getRootAliases()) . '.' . $column); } } $condition->setColumn($columns); list($where) = $condition->__toArray(NULL, NULL, FALSE); $rand = $this->getRand(); $where = preg_replace_callback('/\\?/', function () use($rand) { static $i = -1; $i++; return ":{$rand}{$i}"; }, $where); $qb->andWhere($where); foreach ($condition->getValueForColumn() as $i => $val) { $qb->setParameter("{$rand}{$i}", $val); } }