Операции сравнения в ActiveRecord Redis

Общие вопросы по использованию второй версии фреймворка. Если не знаете как что-то сделать и это про Yii 2, вам сюда.
Ответить
misterdimka
Сообщения: 15
Зарегистрирован: 2014.01.30, 12:09

Операции сравнения в ActiveRecord Redis

Сообщение misterdimka »

В документации(http://www.yiiframework.com/doc-2.0/yii ... ecord.html) прочитал, что Redis поддерживает операции сравнения:
The following code shows how to apply a default condition for all queries:

Код: Выделить всё

class Customer extends ActiveRecord
{
    public static function find()
    {
        return parent::find()->where(['deleted' => false]);
    }
}

// Use andWhere()/orWhere() to apply the default condition
// SELECT FROM customer WHERE `deleted`=:deleted AND age>30
$customers = Customer::find()->andWhere('age>30')->all();

// Use where() to ignore the default condition
// SELECT FROM customer WHERE age>30
$customers = Customer::find()->where('age>30')->all();
такой пример выдаст ошибку:
Where condition must be an array in redis ActiveRecord.
во всех остальных примерах в качестве параметра для where всегда передается массив - и это работает.

Код: Выделить всё

$customers = Customer::find()->where(['age' => 30])->all();
но проверятся всегда точное соответствие, а мне нужны операции сравнения.

Собственно вопрос - поддерживает ли фреймворковский ActiveRecord для Redis операции сравнения и желательно маленький примерчик.
Аватара пользователя
irpsv
Сообщения: 65
Зарегистрирован: 2015.07.07, 18:03
Контактная информация:

Re: Операции сравнения в ActiveRecord Redis

Сообщение irpsv »

А обычным, для QueryBuilder, способом не пробовали? Типа такого:

Код: Выделить всё

Customer::find()->where(['>','age','30'])->all(); 
Вот полная статья по нему: https://github.com/yiisoft/yii2/blob/ma ... builder.md
...то что мы не понимаем, делает нас тупее...
misterdimka
Сообщения: 15
Зарегистрирован: 2014.01.30, 12:09

Re: Операции сравнения в ActiveRecord Redis

Сообщение misterdimka »

Так тоже не работает:
Error:
Found unknown operator in query
я исходники посмотрел в yii2-redis/LuaScriptBuilder.php

Код: Выделить всё

    public function buildCondition($condition, &$columns)
    {
        static $builders = [
            'not' => 'buildNotCondition',
            'and' => 'buildAndCondition',
            'or' => 'buildAndCondition',
            'between' => 'buildBetweenCondition',
            'not between' => 'buildBetweenCondition',
            'in' => 'buildInCondition',
            'not in' => 'buildInCondition',
            'like' => 'buildLikeCondition',
            'not like' => 'buildLikeCondition',
            'or like' => 'buildLikeCondition',
            'or not like' => 'buildLikeCondition',
        ];

        if (!is_array($condition)) {
            throw new NotSupportedException('Where condition must be an array in redis ActiveRecord.');
        }
        if (isset($condition[0])) { // operator format: operator, operand 1, operand 2, ...
            $operator = strtolower($condition[0]);
            if (isset($builders[$operator])) {
                $method = $builders[$operator];
                array_shift($condition);

                return $this->$method($operator, $condition, $columns);
            } else {
                throw new Exception('Found unknown operator in query: ' . $operator);
            }
        } else { // hash format: 'column1' => 'value1', 'column2' => 'value2', ...

            return $this->buildHashCondition($condition, $columns);
        }
    }
получаеться что только операцией between можно заменить. операций ">" и "<" нет.
o.vysidalko
Сообщения: 7
Зарегистрирован: 2015.05.19, 12:21

Re: Операции сравнения в ActiveRecord Redis

Сообщение o.vysidalko »

Всем доброго времени суток! Столкнулся с такой же проблемой! Надеюсь кто-то подскажет пример решения!
misterdimka
Сообщения: 15
Зарегистрирован: 2014.01.30, 12:09

Re: Операции сравнения в ActiveRecord Redis

Сообщение misterdimka »

Я думаю ответ прост - этот extension действительно не поддерживает эти опреации. По карйней мере в той версии что есть сейчас.
Для себя решил проблему так что использую between. Корявенько - но работает. Тем более если учитывать то, что Redis дает в производительности по сравнении с реляционными базами данных.
o.vysidalko
Сообщения: 7
Зарегистрирован: 2015.05.19, 12:21

Re: Операции сравнения в ActiveRecord Redis

Сообщение o.vysidalko »

misterdimka писал(а):Я думаю ответ прост - этот extension действительно не поддерживает эти опреации. По карйней мере в той версии что есть сейчас.
Для себя решил проблему так что использую between. Корявенько - но работает. Тем более если учитывать то, что Redis дает в производительности по сравнении с реляционными базами данных.
Спасибо за ответ!
Ответить