From a69b14755c43b655d1bdf97b67dfbb10d91c21f7 Mon Sep 17 00:00:00 2001 From: LIERLIER <1113093541@qq.com> Date: Mon, 21 Aug 2023 15:35:55 +0800 Subject: [PATCH] migration --- readme.md | 30 +++++++++++++++++------------- 1 file changed, 17 insertions(+), 13 deletions(-) diff --git a/readme.md b/readme.md index 06201d3..8e94a79 100644 --- a/readme.md +++ b/readme.md @@ -299,6 +299,7 @@ $myModels = MyModel::find() ##### 标志位插入到第 `n` 位,默认值为 `k` 插入公式: `(value >> n << (n + 1)) + (value & ((1 << n) - 1)) + (k << n)` + 删除公式: `(value >> (n + 1) << n) + (value & ((1 << n) - 1))` migration: @@ -318,7 +319,7 @@ class mxxxxxx_xxxxxx_update_{table}_table_{column}_column extends Migration */ public function safeUp() { - $this->update('{table}', ['{column}' => $this->getBitFlagExpression('{column}', {pos}, 'insert', {k})]); + $this->addBitFlag('{table}', '{column}', {pos}, {defaultValue}); } /** @@ -326,27 +327,30 @@ class mxxxxxx_xxxxxx_update_{table}_table_{column}_column extends Migration */ public function safeDown() { - $this->update('{table}', ['{column}' => $this->getBitFlagExpression('{column}', {pos}, 'delete')]); + $this->deleteBitFlag('{table}', '{column}', {pos}); } /** + * 添加标志位 + * @param string $table * @param string $column * @param int $pos - * @param string $operate * @param int $defaultValue - * @return \yii\db\Expression */ - public function getBitFlagExpression($column, $pos, $operate, $defaultValue = 0) + public function addBitFlag($table, $column, $pos, $defaultValue = 0) { - if ($operate == 'insert') { - $expresstion = "($column >> $pos << ($pos + 1)) + ($column & ((1 << $pos) - 1)) + ($defaultValue << $pos)"; - } elseif ($operate == 'delete') { - $expresstion = "($column >> ($pos + 1) << $pos) + ($column & ((1 << $pos) - 1))"; - } else { - throw new \InvalidArgumentException('$operate: '.$operate); - } + $this->update($table, [$column => new \yii\db\Expression("($column >> $pos << ($pos + 1)) + ($column & ((1 << $pos) - 1)) + ($defaultValue << $pos)")]); + } - return new \yii\db\Expression($expresstion); + /** + * 删除标志位 + * @param string $table + * @param string $column + * @param int $pos + */ + public function deleteBitFlag($table, $column, $pos) + { + $this->update($table, [$column => new \yii\db\Expression("($column >> ($pos + 1) << $pos) + ($column & ((1 << $pos) - 1))")]); } }