我能够将数据保存到数据库,并在主键列(id)中创建一个uuid。当我打电话给$ model-> save();然后访问$ model-> id,它返回:
{"expression":"UUID()","params":[]}
它应该返回数据库中的实际值...如何获取mysql存储的实际值?
我有一个在uuid中添加的beforeSave函数:
public function beforeSave() {
if ($this->isNewRecord)
$this->id = new CDbExpression('UUID()');
return parent::beforeSave();
}
我还尝试创建一个触发器,在更新id之前执行mysql uuid函数... $ model-> id然后返回null。
答案 0 :(得分:2)
问题是你告诉Yii运行MySQL函数插入数据库。它确实很好,但是Yii之后没有重新读取记录以获得价值。重新阅读它将是低效的,因为你正在做的事情并不是很常用,并且通常不需要从数据库中读取数据。你可以通过两种方式解决这个问题:
1)从db中自己读取值。你可以做一个$ model-> save(); $模型 - >刷新();之后,您应该在$ model中获得最新数据
2)你可以让你的功能做一个
public function beforeSave() {
if ($this->isNewRecord)
$this->id = Yii::app()->db->createCommand('select UUID()')->queryScalar();
return parent::beforeSave();
}
我没有测试过这个,但你明白了。
这将转到DB,运行UUID()并返回yii结果。通过分配$ this-> id字符串而不是mysql命令,您可以立即使用该值而无需刷新。这仍将使用MySQL来获取UUID,因此它仍然会给服务器带来一些压力。
通常我会做类似
的事情public function beforeSave() {
if ($this->isNewRecord)
$this->hash = hash('ripemd160',microtime());
return parent::beforeSave();
}
所以我根本不使用MySQL服务器,但是因为你使用你的列作为ID,你可能希望UUID()生成一个真正唯一的ID。