select('time')->from('log')->orderBy('id ASC')->limit(1), * 'update_time' * ); * * // Will be built to: * // NOW() BETWEEN (SELECT time FROM log ORDER BY id ASC LIMIT 1) AND update_time * ``` * * @author Dmytro Naumenko * @since 2.0.14 */ class BetweenColumnsCondition implements ConditionInterface { /** * @var string $operator the operator to use (e.g. `BETWEEN` or `NOT BETWEEN`) */ private $operator; /** * @var mixed the value to compare against */ private $value; /** * @var string|ExpressionInterface|Query the column name or expression that is a beginning of the interval */ private $intervalStartColumn; /** * @var string|ExpressionInterface|Query the column name or expression that is an end of the interval */ private $intervalEndColumn; /** * Creates a condition with the `BETWEEN` operator. * * @param mixed the value to compare against * @param string $operator the operator to use (e.g. `BETWEEN` or `NOT BETWEEN`) * @param string|ExpressionInterface $intervalStartColumn the column name or expression that is a beginning of the interval * @param string|ExpressionInterface $intervalEndColumn the column name or expression that is an end of the interval */ public function __construct($value, $operator, $intervalStartColumn, $intervalEndColumn) { $this->value = $value; $this->operator = $operator; $this->intervalStartColumn = $intervalStartColumn; $this->intervalEndColumn = $intervalEndColumn; } /** * @return string */ public function getOperator() { return $this->operator; } /** * @return mixed */ public function getValue() { return $this->value; } /** * @return string|ExpressionInterface|Query */ public function getIntervalStartColumn() { return $this->intervalStartColumn; } /** * @return string|ExpressionInterface|Query */ public function getIntervalEndColumn() { return $this->intervalEndColumn; } /** * {@inheritdoc} * @throws InvalidArgumentException if wrong number of operands have been given. */ public static function fromArrayDefinition($operator, $operands) { if (!isset($operands[0], $operands[1], $operands[2])) { throw new InvalidArgumentException("Operator '$operator' requires three operands."); } return new static($operands[0], $operator, $operands[1], $operands[2]); } }