Bitrix-D7  20.0.0
Класс ConditionTree

Открытые члены

 __construct ()
 ConditionTree constructor. Подробнее...
 
 logic ($logic=null)
 All conditions will be imploded by this logic: static::LOGIC_AND or static::LOGIC_OR. Подробнее...
 
 negative ($negative=true)
 Sets NOT before all the conditions. Подробнее...
 
 where ()
 General condition. Подробнее...
 
 whereNot ()
 Sets NOT before any conditions or subfilter. Подробнее...
 
 whereColumn ()
 The same logic as where(), but value will be taken as another column name. Подробнее...
 
 whereNull ($column)
 Compares column with NULL. Подробнее...
 
 whereNotNull ($column)
 Compares column with NOT NULL. Подробнее...
 
 whereIn ($column, $values)
 IN() condition. Подробнее...
 
 whereNotIn ($column, $values)
 Negative IN() condition. Подробнее...
 
 whereBetween ($column, $valueMin, $valueMax)
 BETWEEN condition. Подробнее...
 
 whereNotBetween ($column, $valueMin, $valueMax)
 Negative BETWEEN condition. Подробнее...
 
 whereLike ($column, $value)
 LIKE condition, without default % placement. Подробнее...
 
 whereNotLike ($column, $value)
 Negative LIKE condition, without default % placement. Подробнее...
 
 whereExists ($query)
 Exists() condition. Подробнее...
 
 whereNotExists ($query)
 Negative Exists() condition. Подробнее...
 
 whereMatch ($column, $value)
 Fulltext search condition. Подробнее...
 
 whereNotMatch ($column, $value)
 Negative fulltext search condition. Подробнее...
 
 getSql ($chains)
 Returns SQL for all conditions and subfilters. Подробнее...
 
 getConditions ()
 Returns all conditions and subfilters. Подробнее...
 
 addCondition ($condition)
 Adds prepared condition. Подробнее...
 
 hasConditions ()
 Checks if filter is not empty. Подробнее...
 
 replaceCondition ($currentCondition, $newCondition)
 Replaces condition with a new one. Подробнее...
 
 removeCondition ($condition)
 Removes one condition. Подробнее...
 
 removeAllConditions ()
 Removes all conditions. Подробнее...
 
 __clone ()
 

Поля данных

const LOGIC_OR = 'or'
 
const LOGIC_AND = 'and'
 

Защищенные члены

 convertValue ($value, IReadable $field=null)
 Converts any value to raw SQL, except of NULL, which is supposed to be handled in Operator. Подробнее...
 
 convertValues ($values, IReadable $field=null)
 Converts array of values to raw SQL. Подробнее...
 

Защищенные данные

 $chains
 
 $conditions = array()
 
 $logic
 
 $isNegative = false
 

Подробное описание

См. определение в файле conditiontree.php строка 23

Конструктор(ы)

◆ __construct()

__construct ( )

ConditionTree constructor.

См. определение в файле conditiontree.php строка 50

51  {
52  $this->logic = static::LOGIC_AND;
53  }

Методы

◆ __clone()

__clone ( )

См. определение в файле conditiontree.php строка 674

675  {
676  $newConditions = array();
677 
678  foreach ($this->conditions as $condition)
679  {
680  $newConditions[] = clone $condition;
681  }
682 
683  $this->conditions = $newConditions;
684  }

◆ addCondition()

addCondition (   $condition)

Adds prepared condition.

Аргументы
Condition | ConditionTree$condition
Возвращает
$this
Исключения
ArgumentException

См. определение в файле conditiontree.php строка 535

536  {
537  if ($condition instanceof Condition || $condition instanceof ConditionTree)
538  {
539  $this->conditions[] = $condition;
540  return $this;
541  }
542 
543  throw new ArgumentException('Unknown type of condition '.gettype($condition));
544  }

◆ convertValue()

convertValue (   $value,
IReadable  $field = null 
)
protected

Converts any value to raw SQL, except of NULL, which is supposed to be handled in Operator.

Аргументы
mixed$value
IReadable$field
Возвращает
mixed|null|string
Исключения
ArgumentException
SystemException

См. определение в файле conditiontree.php строка 617

618  {
619  // any sql expression
620  if ($value instanceof SqlExpression)
621  {
622  return $value->compile();
623  }
624 
625  // subquery
626  if ($value instanceof Query)
627  {
628  return $value->getQuery();
629  }
630 
631  // subfilter
632  if ($value instanceof ConditionTree)
633  {
634  return $value->getSql($this->chains);
635  }
636 
637  // nulls
638  if ($value === null)
639  {
640  return new Expressions\NullExpression;
641  }
642 
643  if ($value instanceof Expressions\ColumnExpression)
644  {
645  /** @var Chain $valueChain */
646  $valueChain = $this->chains[$value->getDefinition()];
647  return $valueChain->getSqlDefinition();
648  }
649 
650  return $field->convertValueToDb($value); // give them current sql helper
651  }

◆ convertValues()

convertValues (   $values,
IReadable  $field = null 
)
protected

Converts array of values to raw SQL.

См. также
ConditionTree::convertValue()
Аргументы
array$values
\Bitrix\Main\ORM\Fields\IReadable | null$field
Возвращает
array
Исключения
ArgumentException
SystemException

См. определение в файле conditiontree.php строка 664

665  {
666  foreach ($values as $k => $value)
667  {
668  $values[$k] = $this->convertValue($value, $field);
669  }
670 
671  return $values;
672  }

◆ getConditions()

getConditions ( )

Returns all conditions and subfilters.

Возвращает
ConditionTree[]|Condition[]

См. определение в файле conditiontree.php строка 522

523  {
524  return $this->conditions;
525  }

◆ getSql()

getSql (   $chains)

Returns SQL for all conditions and subfilters.

Аргументы
Chain[]$chains
Возвращает
string
Исключения
ArgumentException
SystemException

См. определение в файле conditiontree.php строка 443

444  {
445  // save chains
446  $this->chains = $chains;
447 
448  $finalSql = array();
449 
450  // build sql
451  foreach ($this->conditions as $condition)
452  {
453  if ($condition instanceof ConditionTree)
454  {
455  // subfilter
456  $subFilter = $condition;
457  $sql = $subFilter->getSql($chains);
458 
459  if (count($subFilter->getConditions()) > 1)
460  {
461  $sql = "({$sql})";
462  }
463  }
464  else
465  {
466  // regular condition
467  $columnSqlDefinition = null;
468  $columnField = null;
469 
470  // define column field
471  if ($condition->getColumn() !== null)
472  {
473  $chain = $chains[$condition->getDefinition()];
474  $columnSqlDefinition = $chain->getSqlDefinition();
475 
476  /** @var IReadable $columnField */
477  $columnField = $chain->getLastElement()->getValue();
478  }
479 
480  // final value's sql
481  if (in_array($condition->getOperator(), array('in', 'between'), true) && is_array($condition->getValue()))
482  {
483  // value is in array of atomic values
484  $finalValue = $this->convertValues($condition->getValue(), $columnField);
485  }
486  else
487  {
488  $finalValue = $this->convertValue($condition->getValue(), $columnField);
489  }
490 
491  // operation method
492  $operators = Operator::get();
493  $operator = $operators[$condition->getOperator()];
494 
495  // final sql
496  $sql = call_user_func(
497  array('Bitrix\Main\ORM\Query\Filter\Operator', $operator),
498  $columnSqlDefinition, $finalValue
499  );
500  }
501 
502  $finalSql[] = $sql;
503  }
504 
505  // concat with $this->logic
506  $sql = join(" ".strtoupper($this->logic)." ", $finalSql);
507 
508  // and put NOT if negative
509  if ($this->isNegative)
510  {
511  $sql = count($finalSql) > 1 ? "NOT ({$sql})" : "NOT {$sql}";
512  }
513 
514  return $sql;
515  }

◆ hasConditions()

hasConditions ( )

Checks if filter is not empty.

Возвращает
bool

См. определение в файле conditiontree.php строка 551

552  {
553  return !empty($this->conditions);
554  }

◆ logic()

logic (   $logic = null)

All conditions will be imploded by this logic: static::LOGIC_AND or static::LOGIC_OR.

Аргументы
string$logicand|or
Возвращает
$this|string
Исключения
ArgumentException

См. определение в файле conditiontree.php строка 63

64  {
65  if ($logic === null)
66  {
67  return $this->logic;
68  }
69 
70  if (!in_array(strtolower($logic), [static::LOGIC_AND, static::LOGIC_OR], true))
71  {
72  throw new ArgumentException("Unknown logic");
73  }
74 
75  $this->logic = strtolower($logic);
76 
77  return $this;
78  }

◆ negative()

negative (   $negative = true)

Sets NOT before all the conditions.

Аргументы
bool$negative
Возвращает
$this

См. определение в файле conditiontree.php строка 87

88  {
89  $this->isNegative = $negative;
90  return $this;
91  }

◆ removeAllConditions()

removeAllConditions ( )

Removes all conditions.

См. определение в файле conditiontree.php строка 602

603  {
604  $this->conditions = [];
605  }

◆ removeCondition()

removeCondition (   $condition)

Removes one condition.

Аргументы
$condition
Возвращает
bool

См. определение в файле conditiontree.php строка 585

586  {
587  foreach ($this->conditions as $k => $_condition)
588  {
589  if ($condition === $_condition)
590  {
591  unset($this->conditions[$k]);
592  return true;
593  }
594  }
595 
596  return false;
597  }

◆ replaceCondition()

replaceCondition (   $currentCondition,
  $newCondition 
)

Replaces condition with a new one.

Аргументы
$currentCondition
$newCondition
Возвращает
bool

См. определение в файле conditiontree.php строка 564

565  {
566  foreach ($this->conditions as $k => $condition)
567  {
568  if ($condition === $currentCondition)
569  {
570  $this->conditions[$k] = $newCondition;
571  return true;
572  }
573  }
574 
575  return false;
576  }

◆ where()

where ( )

General condition.

In regular case used with 3 parameters: where(columnName, operator, value), e.g. ('ID', '=', 1); ('SALARY', '>', '500')

List of available operators can be found in Operator class.

См. также
Operator::$operators

Can be used in short format: where(columnName, value), with operator '=' by default Can be used in ultra short format: where(columnName), for boolean fields only

Can be used for subfilter set: where(ConditionTree subfilter)

Instead of columnName, you can use runtime field: where(new ExpressionField('TMP', 'CONCAT(s, s)', ["NAME", "LAST_NAME"]), 'Anton Ivanov') or with expr helper where(Query::expr()->concat("NAME", "LAST_NAME"), 'Anton Ivanov')

Аргументы
array...$filter
Возвращает
$this
Исключения
ArgumentException

См. определение в файле conditiontree.php строка 118

119  {
120  $filter = func_get_args();
121 
122  // subfilter
123  if (count($filter) == 1 && $filter[0] instanceof ConditionTree)
124  {
125  $this->conditions[] = $filter[0];
126  return $this;
127  }
128 
129  // ready condition
130  if (count($filter) == 1 && $filter[0] instanceof Condition)
131  {
132  $this->conditions[] = $filter[0];
133  return $this;
134  }
135 
136  // array of conditions
137  if (count($filter) == 1 && is_array($filter[0]))
138  {
139  foreach ($filter[0] as $condition)
140  {
141  // call `where` for each condition
142  call_user_func_array(array($this, 'where'), $condition);
143  }
144  return $this;
145  }
146 
147  // regular conditions
148  if (count($filter) == 3)
149  {
150  // everything is clear
151  list($column, $operator, $value) = $filter;
152  }
153  elseif (count($filter) == 2)
154  {
155  // equal by default
156  list($column, $value) = $filter;
157  $operator = '=';
158  }
159  elseif (count($filter) == 1)
160  {
161  // suppose it is boolean field with true value
162  $column = $filter[0];
163  $operator = '=';
164  $value = true;
165  }
166  else
167  {
168  throw new ArgumentException('Wrong arguments');
169  }
170 
171  // validate operator
172  $operators = Operator::get();
173  if (!isset($operators[$operator]))
174  {
175  throw new ArgumentException("Unknown operator `{$operator}`");
176  }
177 
178  // add condition
179  $this->conditions[] = new Condition($column, $operator, $value);
180 
181  return $this;
182  }

◆ whereBetween()

whereBetween (   $column,
  $valueMin,
  $valueMax 
)

BETWEEN condition.

Аргументы
$column
$valueMin
$valueMax
Возвращает
$this

См. определение в файле conditiontree.php строка 308

309  {
310  $this->conditions[] = new Condition($column, 'between', array($valueMin, $valueMax));
311 
312  return $this;
313  }

◆ whereColumn()

whereColumn ( )

The same logic as where(), but value will be taken as another column name.

См. также
ConditionTree::where()
Аргументы
array...$filter
Возвращает
$this
Исключения
ArgumentException

См. определение в файле conditiontree.php строка 212

213  {
214  $filter = func_get_args();
215 
216  if (count($filter) == 3)
217  {
218  list($column, $operator, $value) = $filter;
219  }
220  elseif (count($filter) == 2)
221  {
222  list($column, $value) = $filter;
223  $operator = '=';
224  }
225  else
226  {
227  throw new ArgumentException('Wrong arguments');
228  }
229 
230  // convert value to column format
231  $value = new Expressions\ColumnExpression($value);
232 
233  // put through general method
234  $this->where($column, $operator, $value);
235 
236  return $this;
237  }

◆ whereExists()

whereExists (   $query)

Exists() condition.

Can be used with Query object or plain sql wrapped with SqlExpression.

Аргументы
Query | SqlExpression$query
Возвращает
$this

См. определение в файле conditiontree.php строка 372

373  {
374  $this->conditions[] = new Condition(null, 'exists', $query);
375 
376  return $this;
377  }

◆ whereIn()

whereIn (   $column,
  $values 
)

IN() condition.

Аргументы
string$column
array | Query | SqlExpression$values
Возвращает
$this

См. определение в файле conditiontree.php строка 275

276  {
277  $this->conditions[] = new Condition($column, 'in', $values);
278 
279  return $this;
280  }

◆ whereLike()

whereLike (   $column,
  $value 
)

LIKE condition, without default % placement.

Аргументы
$column
$value
Возвращает
$this

См. определение в файле conditiontree.php строка 341

342  {
343  $this->conditions[] = new Condition($column, 'like', $value);
344 
345  return $this;
346  }

◆ whereMatch()

whereMatch (   $column,
  $value 
)

Fulltext search condition.

См. также
Helper::matchAgainstWildcard() for preparing $value for AGAINST.
Аргументы
$column
$value
Возвращает
$this

См. определение в файле conditiontree.php строка 410

411  {
412  $this->conditions[] = new Condition($column, 'match', $value);
413 
414  return $this;
415  }

◆ whereNot()

whereNot ( )

Sets NOT before any conditions or subfilter.

См. также
ConditionTree::where()
Аргументы
array...$filter
Возвращает
$this

См. определение в файле conditiontree.php строка 192

193  {
194  $filter = func_get_args();
195 
196  $subFilter = new static();
197  call_user_func_array(array($subFilter, 'where'), $filter);
198 
199  $this->conditions[] = $subFilter->negative();
200  return $this;
201  }

◆ whereNotBetween()

whereNotBetween (   $column,
  $valueMin,
  $valueMax 
)

Negative BETWEEN condition.

См. также
ConditionTree::whereBetween()
Аргументы
$column
$valueMin
$valueMax
Возвращает
$this

См. определение в файле conditiontree.php строка 325

326  {
327  $subFilter = new static();
328  $this->conditions[] = $subFilter->whereBetween($column, $valueMin, $valueMax)->negative();
329 
330  return $this;
331  }

◆ whereNotExists()

whereNotExists (   $query)

Negative Exists() condition.

Can be used with Query object or plain sql wrapped with SqlExpression.

См. также
ConditionTree::whereExists()
Аргументы
Query | SqlExpression$query
Возвращает
$this
Исключения
ArgumentException

См. определение в файле conditiontree.php строка 388

389  {
390  if ($query instanceof Query || $query instanceof SqlExpression)
391  {
392  $subFilter = new static();
393  $this->conditions[] = $subFilter->whereExists($query)->negative();
394 
395  return $this;
396  }
397 
398  throw new ArgumentException('Unknown type of query '.gettype($query));
399  }

◆ whereNotIn()

whereNotIn (   $column,
  $values 
)

Negative IN() condition.

См. также
ConditionTree::whereIn()
Аргументы
string$column
array | Query | SqlExpression$values
Возвращает
$this

См. определение в файле conditiontree.php строка 291

292  {
293  $subFilter = new static();
294  $this->conditions[] = $subFilter->whereIn($column, $values)->negative();
295 
296  return $this;
297  }

◆ whereNotLike()

whereNotLike (   $column,
  $value 
)

Negative LIKE condition, without default % placement.

См. также
ConditionTree::whereLike()
Аргументы
$column
$value
Возвращает
$this

См. определение в файле conditiontree.php строка 357

358  {
359  $subFilter = new static();
360  $this->conditions[] = $subFilter->whereLike($column, $value)->negative();
361 
362  return $this;
363  }

◆ whereNotMatch()

whereNotMatch (   $column,
  $value 
)

Negative fulltext search condition.

См. также
Helper::matchAgainstWildcard() for preparing $value for AGAINST.
Аргументы
$column
$value
Возвращает
$this

См. определение в файле conditiontree.php строка 426

427  {
428  $subFilter = new static();
429  $this->conditions[] = $subFilter->whereMatch($column, $value)->negative();
430 
431  return $this;
432  }

◆ whereNotNull()

whereNotNull (   $column)

Compares column with NOT NULL.

Аргументы
string$column
Возвращает
$this

См. определение в файле conditiontree.php строка 260

261  {
262  $this->conditions[] = new Condition($column, '<>', null);
263 
264  return $this;
265  }

◆ whereNull()

whereNull (   $column)

Compares column with NULL.

Аргументы
string$column
Возвращает
$this

См. определение в файле conditiontree.php строка 246

247  {
248  $this->conditions[] = new Condition($column, '=', null);
249 
250  return $this;
251  }

Поля

◆ $chains

$chains
protected

См. определение в файле conditiontree.php строка 26

◆ $conditions

$conditions = array()
protected

См. определение в файле conditiontree.php строка 29

◆ $isNegative

$isNegative = false
protected

См. определение в файле conditiontree.php строка 45

◆ $logic

$logic
protected

См. определение в файле conditiontree.php строка 35

◆ LOGIC_AND

const LOGIC_AND = 'and'

См. определение в файле conditiontree.php строка 39

◆ LOGIC_OR

const LOGIC_OR = 'or'

См. определение в файле conditiontree.php строка 37


Объявления и описания членов класса находятся в файле:
Bitrix\Main\ORM\Query\Filter\ConditionTree\convertValue
convertValue($value, IReadable $field=null)
Converts any value to raw SQL, except of NULL, which is supposed to be handled in Operator.
Definition: conditiontree.php:617
Bitrix\Main\ORM\Query\Filter\ConditionTree\$logic
$logic
Definition: conditiontree.php:35
Bitrix\Main\ORM\Query\Filter\ConditionTree\$chains
$chains
Definition: conditiontree.php:26
Bitrix\Main\ORM\Query\Query\$filter
$filter
Definition: main/lib/orm/query/query.php:127
Bitrix\Main\ORM\Query\Filter\ConditionTree\logic
logic($logic=null)
All conditions will be imploded by this logic: static::LOGIC_AND or static::LOGIC_OR.
Definition: conditiontree.php:63
Bitrix\Main\ORM\Query\Filter\ConditionTree\$conditions
$conditions
Definition: conditiontree.php:29
Bitrix\Main\ORM\Query\Filter\ConditionTree\convertValues
convertValues($values, IReadable $field=null)
Converts array of values to raw SQL.
Definition: conditiontree.php:664
Bitrix\Main\ORM\Query\Filter\ConditionTree\where
where()
General condition.
Definition: conditiontree.php:118
Bitrix\Main\ORM\Query\Filter\Operator\get
static get()
List of available operators code => method.
Definition: operator.php:43