就是用Mysql內建的這個
select uuid();
在ActiveRecord裡該如何處理
id = 'uuid()';...$model->save();
問題:顯然上面這種方法是不行的,有沒有其他的處理方式
回複內容:
就是用Mysql內建的這個
select uuid();
在ActiveRecord裡該如何處理
id = 'uuid()';...$model->save();
問題:顯然上面這種方法是不行的,有沒有其他的處理方式
在ActiveRecord::behaviors()裡增加一個PrimaryKeyBehavior來處理ActiveRecord::EVENT_BEFORE_INSERT這種方法可行
class PrimaryKeyBehavior extends AttributeBehavior{ public $primaryKeyAttribute = 'id'; public $value; public function init() { parent::init(); if (empty($this->attributes)) { $this->attributes = [ BaseActiveRecord::EVENT_BEFORE_INSERT => [$this->primaryKeyAttribute], ]; } } protected function getValue($event) { return new Expression('UUID()'); }}
在model裡調用
class Test extends \yii\db\ActiveRecord{ ... public function behaviors() { return [ \common\behaviors\PrimaryKeyBehavior::className(), ]; } ...}
這種方法可以實現靈活調用,在有需要的Model裡調用,並且不用在寫邏輯的時候加上$model->id = uuid()
確定 id 是字串類型, 然後試下這樣:
$model->id = new \yii\db\Expression('uuid()');