Verification: a143cc29221c9be0

Php array search array column

◆ __construct()

ConditionTree constructor.

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

52  {

53  $this->logic = static::LOGIC_AND;

54  }

logic($logic=null)

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

◆ __clone()

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

684  {

685  $newConditions = array();

686 

687  foreach ($this->conditions as $condition)

688  {

689  $newConditions[] = clone $condition;

690  }

691 

692  $this->conditions = $newConditions;

693  }

◆ addCondition()

addCondition (   $condition )

Adds prepared condition.

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

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

545  {

546  if ($condition instanceof Condition || $condition instanceof ConditionTree)

547  {

548  $this->conditions[] = $condition;

549  return $this;

550  }

551 

552  throw new ArgumentException('Unknown type of condition '.gettype($condition));

553  }

◆ 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
Исключения

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

627  {

628 

629  if ($value instanceof SqlExpression)

630  {

631  return $value->compile();

632  }

633 

634 

635  if ($value instanceof Query)

636  {

637  return $value->getQuery();

638  }

639 

640 

641  if ($value instanceof ConditionTree)

642  {

643  return $value->getSql($this->chains);

644  }

645 

646 

647  if ($value === null)

648  {

649  return new Expressions\NullExpression;

650  }

651 

652  if ($value instanceof Expressions\ColumnExpression)

653  {

654 

655  $valueChain = $this->chains[$value->getDefinition()];

656  return $valueChain->getSqlDefinition();

657  }

658 

659  return $field->convertValueToDb($value);

660  }

◆ 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
Исключения

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

674  {

675  foreach ($values as $k => $value)

676  {

677  $values[$k] = $this->convertValue($value, $field);

678  }

679 

680  return $values;

681  }

convertValue($value, IReadable $field=null)

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

◆ createFromArray()

static createFromArray (   $filter )
static

Creates filter object from array.

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

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

704  {

706 

707  if (isset($filter['logic']))

708  {

709  $conditionTree->logic($filter['logic']);

710  unset($filter['logic']);

711  }

712 

713  if (isset($filter['negative']))

714  {

715  $conditionTree->negative($filter['negative']);

716  unset($filter['negative']);

717  }

718 

719  foreach ($filter as $condition)

720  {

721  if (isset($condition[0]) && is_array($condition[0]))

722  {

723  $conditionTree->where(static::createFromArray($condition));

724  }

725  else

726  {

727 

728  $valueKey = key(array_reverse($condition, true));

729  $valueElement = $condition[$valueKey];

730 

731  if (is_array($valueElement))

732  {

733  if (isset($valueElement['value']))

734  {

735  $value = $valueElement['value'];

736  }

737  elseif (isset($valueElement['column']))

738  {

739  $value = new ColumnExpression($valueElement['column']);

740  }

741  else

742  {

743 

744  foreach ($valueElement as $k => $singleValue)

745  {

746  if (is_array($singleValue))

747  {

748  if (isset($singleValue['value']))

749  {

750  $valueElement[$k] = $singleValue['value'];

751  }

752  elseif (isset($singleValue['column']))

753  {

754  $valueElement[$k] = new ColumnExpression($singleValue['column']);

755  }

756  }

757  }

758 

759  $value = $valueElement;

760  }

761 

762  $condition[$valueKey] = $value;

763  }

764 

765  $conditionTree->where(...$condition);

766  }

767  }

768 

769  return $conditionTree;

770  }

static filter()

Returns new instance of Filter.

◆ getConditions()

◆ getSql()

Returns SQL for all conditions and subfilters.

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

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

445  {

446 

447  $this->chains = $chains;

448 

449  $finalSql = array();

450 

451 

452  foreach ($this->conditions as $condition)

453  {

454  if ($condition instanceof ConditionTree)

455  {

456 

457  $subFilter = $condition;

458  $sql = $subFilter->getSql($chains);

459 

460  if (count($subFilter->getConditions()) > 1)

461  {

462  $sql = "({$sql})";

463  }

464  }

465  else

466  {

467 

468  $columnSqlDefinition = null;

469  $columnField = null;

470 

471 

472  if ($condition->getColumn() !== null)

473  {

474  $chain = $chains[$condition->getDefinition()];

475  $columnSqlDefinition = $chain->getSqlDefinition();

476 

477 

478  $columnField = $chain->getLastElement()->getValue();

479  }

480 

481 

482  if (in_array($condition->getOperator(), array('in', 'between'), true) && is_array($condition->getValue()))

483  {

484 

485  $finalValue = $this->convertValues($condition->getValue(), $columnField);

486  }

487  else

488  {

489  $finalValue = $this->convertValue($condition->getValue(), $columnField);

490  }

491 

492 

494  $operator = $operators[$condition->getOperator()];

495 

496 

497  $sql = call_user_func(

498  array('Bitrix\Main\ORM\Query\Filter\Operator', $operator),

499  $columnSqlDefinition, $finalValue

500  );

501  }

502 

503  if ($sql != '')

504  {

505  $finalSql[] = $sql;

506  }

507  }

508 

509  $sql = null;

510 

511  if (!empty($finalSql))

512  {

513 

514  $sql = join(" ".strtoupper($this->logic)." ", $finalSql);

515 

516 

517  if ($this->isNegative)

518  {

519  $sql = count($finalSql) > 1 ? "NOT ({$sql})" : "NOT {$sql}";

520  }

521  }

522 

523  return $sql;

524  }

convertValues($values, IReadable $field=null)

Converts array of values to raw SQL.

static get()

List of available operators code => method.

◆ hasConditions()

Checks if filter is not empty.

Возвращает
bool

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

561  {

562  return !empty($this->conditions);

563  }

◆ logic()

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

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

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

65  {

67  {

69  }

70 

71  if (!in_array(strtolower($logic), [static::LOGIC_AND, static::LOGIC_OR], true))

72  {

73  throw new ArgumentException("Unknown logic");

74  }

75 

77 

78  return $this;

79  }

◆ negative()

negative (   $negative = true )

Sets NOT before all the conditions.

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

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

89  {

90  $this->isNegative = (bool) $negative;

91  return $this;

92  }

◆ removeAllConditions()

Removes all conditions.

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

612  {

613  $this->conditions = [];

614  }

◆ removeCondition()

removeCondition (   $condition )

Removes one condition.

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

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

595  {

596  foreach ($this->conditions as $k => $_condition)

597  {

598  if ($condition === $_condition)

599  {

600  unset($this->conditions[$k]);

601  return true;

602  }

603  }

604 

605  return false;

606  }

◆ replaceCondition()

replaceCondition (   $currentCondition,
  $newCondition 
)

Replaces condition with a new one.

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

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

574  {

575  foreach ($this->conditions as $k => $condition)

576  {

577  if ($condition === $currentCondition)

578  {

579  $this->conditions[$k] = $newCondition;

580  return true;

581  }

582  }

583 

584  return false;

585  }

◆ 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')

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

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

120  {

121  $filter = func_get_args();

122 

123 

124  if (count($filter) == 1 && $filter[0] instanceof ConditionTree)

125  {

126  $this->conditions[] = $filter[0];

127  return $this;

128  }

129 

130 

131  if (count($filter) == 1 && $filter[0] instanceof Condition)

132  {

133  $this->conditions[] = $filter[0];

134  return $this;

135  }

136 

137 

139  {

140  foreach ($filter[0] as $condition)

141  {

142 

143  call_user_func_array(array($this, 'where'), $condition);

144  }

145  return $this;

146  }

147 

148 

149  if (count($filter) == 3)

150  {

151 

152  list($column, $operator, $value) = $filter;

153  }

154  elseif (count($filter) == 2)

155  {

156 

157  list($column, $value) = $filter;

158  $operator = '=';

159  }

160  elseif (count($filter) == 1)

161  {

162 

164  $operator = '=';

165  $value = true;

166  }

167  else

168  {

169  throw new ArgumentException('Wrong arguments');

170  }

171 

172 

174  if (!isset($operators[$operator]))

175  {

176  throw new ArgumentException("Unknown operator `{$operator}`");

177  }

178 

179 

180  $this->conditions[] = new Condition($column, $operator, $value);

181 

182  return $this;

183  }

◆ whereBetween()

whereBetween (   $column,
  $valueMin,
  $valueMax 
)

BETWEEN condition.

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

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

310  {

311  $this->conditions[] = new Condition($column, 'between', array($valueMin, $valueMax));

312 

313  return $this;

314  }

◆ whereColumn()

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

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

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

214  {

215  $filter = func_get_args();

216 

217  if (count($filter) == 3)

218  {

219  list($column, $operator, $value) = $filter;

220  }

221  elseif (count($filter) == 2)

222  {

223  list($column, $value) = $filter;

224  $operator = '=';

225  }

226  else

227  {

228  throw new ArgumentException('Wrong arguments');

229  }

230 

231 

232  $value = new Expressions\ColumnExpression($value);

233 

234 

235  $this->where($column, $operator, $value);

236 

237  return $this;

238  }

where()

General condition.

◆ whereExists()

Exists() condition.

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

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

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

374  {

375  $this->conditions[] = new Condition(null, 'exists', $query);

376 

377  return $this;

378  }

◆ whereIn()

whereIn (   $column,
  $values 
)

IN() condition.

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

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

277  {

278  $this->conditions[] = new Condition($column, 'in', $values);

279 

280  return $this;

281  }

◆ whereLike()

whereLike (   $column,
  $value 
)

LIKE condition, without default % placement.

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

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

343  {

344  $this->conditions[] = new Condition($column, 'like', $value);

345 

346  return $this;

347  }

◆ whereMatch()

whereMatch (   $column,
  $value 
)

Fulltext search condition.

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

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

412  {

413  $this->conditions[] = new Condition($column, 'match', $value);

414 

415  return $this;

416  }

◆ whereNot()

Sets NOT before any conditions or subfilter.

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

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

194  {

195  $filter = func_get_args();

196 

197  $subFilter = new static();

198  call_user_func_array(array($subFilter, 'where'), $filter);

199 

200  $this->conditions[] = $subFilter->negative();

201  return $this;

202  }

◆ whereNotBetween()

whereNotBetween (   $column,
  $valueMin,
  $valueMax 
)

Negative BETWEEN condition.

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

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

327  {

328  $subFilter = new static();

329  $this->conditions[] = $subFilter->whereBetween($column, $valueMin, $valueMax)->negative();

330 

331  return $this;

332  }

◆ whereNotExists()

whereNotExists (   $query )

Negative Exists() condition.

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

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

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

390  {

391  if ($query instanceof Query || $query instanceof SqlExpression)

392  {

393  $subFilter = new static();

394  $this->conditions[] = $subFilter->whereExists($query)->negative();

395 

396  return $this;

397  }

398 

399  throw new ArgumentException('Unknown type of query '.gettype($query));

400  }

◆ whereNotIn()

whereNotIn (   $column,
  $values 
)

Negative IN() condition.

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

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

293  {

294  $subFilter = new static();

295  $this->conditions[] = $subFilter->whereIn($column, $values)->negative();

296 

297  return $this;

298  }

◆ whereNotLike()

whereNotLike (   $column,
  $value 
)

Negative LIKE condition, without default % placement.

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

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

359  {

360  $subFilter = new static();

361  $this->conditions[] = $subFilter->whereLike($column, $value)->negative();

362 

363  return $this;

364  }

◆ whereNotMatch()

whereNotMatch (   $column,
  $value 
)

Negative fulltext search condition.

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

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

428  {

429  $subFilter = new static();

430  $this->conditions[] = $subFilter->whereMatch($column, $value)->negative();

431 

432  return $this;

433  }

◆ whereNotNull()

whereNotNull (   $column )

Compares column with NOT NULL.

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

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

262  {

263  $this->conditions[] = new Condition($column, '', null);

264 

265  return $this;

266  }

◆ whereNull()

Compares column with NULL.

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

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

248  {

249  $this->conditions[] = new Condition($column, '=', null);

250 

251  return $this;

252  }

◆ $chains

◆ $conditions

◆ $isNegative

◆ $logic

◆ LOGIC_AND