yii2-redis find () возвращает пустые результаты - PullRequest
0 голосов
/ 03 июня 2018

У меня есть следующая простая модель:

<?php

namespace app\models;

use Yii;
use yii\base\Model;
use \yii\redis\ActiveRecord;
use \yii\db\ActiveQuery;

class StatsModel extends ActiveRecord
{

    public function attributes()
    {
        return ['user'];
    }
    public function rules()
    {
        return [
            ['user' : 'string']
        ];
    }
    public static function getDb()
    {

        return \Yii::$app->db_redis;
    }
}

\Yii::$app->db_redis; - это конфиг в web.php:

<?php

return [
    'class' => 'yii\redis\Connection',
    'hostname' => 'localhost',
    'port'     => 6379,
    'database' => 0

];

Я делаю в Redis-Cli:

127.0.0.1:6379> select 0
OK
127.0.0.1:6379> hmset key123 user michael
OK
127.0.0.1:6379>

Но когда я делаю $test = \app\models\StatsModel::find()->all(); в виде компоновки, я вижу в отладчике xdebug, что он возвращает пустой набор, как будто внутри redis нет записей.Я не могу понять, почему, я просто добавил пользователя и ключ к базе данных с индексом 0. Может кто-нибудь объяснить это

1 Ответ

0 голосов
/ 03 июня 2018

ActiveRecord для Redis использует выделенную структуру и несколько ключей для хранения данных о моделях.Не ожидайте, что вы можете нажать некоторые данные со случайными ключами, и это будет интерпретироваться как активная модель записи.StatsModel::find()->all() ничего не возвращает, потому что вы не создали никакой модели - вы передали некоторые данные в redis, но это не модель активной записи.Вы должны использовать ActiveRecord для сохранения модели, если вы хотите использовать ее с StatsModel::find():

$model = new StatsModel();
$model->id = 1;
$model->user = 'rob006';
$model->save();

$result = StatsModel::find()->all(); // finds one model

Или не использовать ActiveRecord и использовать запросы напрямую:

$result = Yii::$app->db_redis->hget('key123', 'user'); // "michael"
...