BookStack\Repos\EntityRepo::applyTagSearches PHP Method

applyTagSearches() protected method

Apply extracted tag search terms onto a entity query.
protected applyTagSearches ( $query, $tags ) : mixed
$query
$tags
return mixed
    protected function applyTagSearches($query, $tags)
    {
        $query->where(function ($query) use($tags) {
            foreach ($tags[1] as $index => $tagName) {
                $query->whereHas('tags', function ($query) use($tags, $index, $tagName) {
                    $tagOperator = $tags[3][$index];
                    $tagValue = $tags[4][$index];
                    if (!empty($tagOperator) && !empty($tagValue) && in_array($tagOperator, $this->queryOperators)) {
                        if (is_numeric($tagValue) && $tagOperator !== 'like') {
                            // We have to do a raw sql query for this since otherwise PDO will quote the value and MySQL will
                            // search the value as a string which prevents being able to do number-based operations
                            // on the tag values. We ensure it has a numeric value and then cast it just to be sure.
                            $tagValue = (double) trim($query->getConnection()->getPdo()->quote($tagValue), "'");
                            $query->where('name', '=', $tagName)->whereRaw("value {$tagOperator} {$tagValue}");
                        } else {
                            $query->where('name', '=', $tagName)->where('value', $tagOperator, $tagValue);
                        }
                    } else {
                        $query->where('name', '=', $tagName);
                    }
                });
            }
        });
        return $query;
    }