我有以下简单的模型:
<?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的数据库。有人能解释一下吗
答案 0 :(得分:1)
StatsModel::find()->all()
用于redis使用专用结构和多个密钥来存储有关模型的数据。不要期望您可以使用随机密钥推送一些数据,它将被解释为活动记录模型。 ActiveRecord
不会返回任何内容,因为您尚未创建任何模型 - 您已将某些数据推送到redis,但这不是活动的记录模型。如果要将其用于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"
并直接使用查询:
async havePermission(channelId) {
if (await this.isPrivateChannel2(channelId) && !(await this.inChannel(channelId))) {
return false;
} else {
return true;
}
}
async permission(channelId) {
console.log(await this.havePermission(channelId));
return await this.havePermission(channelId);
}
}