/** * Build between query by two search fields * @param ActiveQuery $query Query object * @param mixed $field Field name: string || array * @param string $format Format name * @param string $to_suffix To field suffix */ public function addRangeCondition($query, $field = 'timestamp', $format = 'timestamp', $to_suffix = '_to') { $model = $this->owner; $search = $field; if (is_array($field)) { $search = key($field); $field = reset($field); } if ($model->{$search}) { $query->andWhere(['>=', $field, $this->formatField($model->{$search}, $format)]); } $search_to = $search . $to_suffix; if ($model->{$search_to}) { $to = $this->formatField($model->{$search_to}, $format); if ($format == 'timestamp') { $to += SECONDS_IN_DAY - 1; } $query->andWhere(['<=', $field, $to]); } }
public function byCluster($cluster) { return parent::andWhere(['cluster' => $cluster]); }
/** * @param ActiveQuery $query * @param array|string $flags * @param bool $prefixTablename * @return ActiveQuery */ public function addFlagsCriteria($query, $flags, $prefixTablename = false) { if (!is_array($flags)) { $flags = [$flags]; } $trueFlags = []; $falseFlags = []; $table = $prefixTablename ? $this->owner->tableName() . '.' : ''; $class = (new \ReflectionClass($this->owner))->getShortName(); foreach ($flags as $key => $value) { if (isset($this->attributes[$key]) && (bool) $value === false) { $falseFlags[] = $this->attributes[$key]; } else { if (isset($this->attributes[$key])) { $trueFlags[] = $this->attributes[$key]; } else { $trueFlags[] = $this->attributes[$value]; } } } if (!empty($trueFlags)) { $tvalue = $this->mergeFlags($trueFlags); $query->andWhere($table . "[[{$this->flagsAttribute}]] & :tvalue{$class}", [":tvalue{$class}" => $tvalue]); } if (!empty($falseFlags)) { $fvalue = $this->mergeFlags($falseFlags); $query->andWhere('!(' . $table . "[[{$this->flagsAttribute}]] & :fvalue{$class})", [":fvalue{$class}" => $fvalue]); } return $query; }