1
0
mirror of https://gitee.com/koogua/course-tencent-cloud.git synced 2025-06-29 13:51:37 +08:00
course-tencent-cloud/db/migrations/20231108085025.php
2023-12-11 12:23:56 +08:00

246 lines
6.2 KiB
PHP

<?php
/**
* @copyright Copyright (c) 2023 深圳市酷瓜软件有限公司
* @license https://opensource.org/licenses/GPL-2.0
* @link https://www.koogua.com
*/
use Phinx\Db\Adapter\MysqlAdapter;
use Phinx\Migration\AbstractMigration;
final class V20231108085025 extends AbstractMigration
{
public function up()
{
$this->alterVipTable();
$this->alterQuestionTable();
$this->alterArticleTable();
$this->alterConsultTable();
$this->alterResourceTable();
$this->alterCourseUserTable();
$this->alterChapterUserTable();
$this->dropCourseCategoryTable();
$this->dropFlashSaleTable();
$this->dropDanmuTable();
$this->handleArticles();
$this->handleNavs();
$this->handleVips();
}
protected function alterVipTable()
{
$table = $this->table('kg_vip');
if (!$table->hasColumn('published')) {
$table->addColumn('published', 'integer', [
'null' => false,
'default' => '0',
'limit' => MysqlAdapter::INT_REGULAR,
'signed' => false,
'comment' => '发布标识',
'after' => 'price',
]);
}
$table->save();
}
protected function alterQuestionTable()
{
$table = $this->table('kg_question');
if (!$table->hasColumn('featured')) {
$table->addColumn('featured', 'integer', [
'null' => false,
'default' => '0',
'limit' => MysqlAdapter::INT_REGULAR,
'signed' => false,
'comment' => '推荐标识',
'after' => 'published',
]);
}
$table->save();
}
protected function alterArticleTable()
{
$table = $this->table('kg_article');
if ($table->hasColumn('private')) {
$table->removeColumn('private');
}
$table->save();
}
protected function alterConsultTable()
{
$table = $this->table('kg_consult');
if ($table->hasColumn('chapter_id')) {
$table->removeColumn('chapter_id');
}
$table->save();
}
protected function alterResourceTable()
{
$table = $this->table('kg_resource');
if ($table->hasColumn('chapter_id')) {
$table->removeColumn('chapter_id');
}
$table->save();
}
protected function alterCourseUserTable()
{
$table = $this->table('kg_course_user');
if ($table->hasColumn('role_type')) {
$this->deleteCourseTeachers();
}
if ($table->hasColumn('role_type')) {
$table->removeColumn('role_type');
}
if (!$table->hasColumn('active_time')) {
$table->addColumn('active_time', 'integer', [
'null' => false,
'default' => '0',
'limit' => MysqlAdapter::INT_REGULAR,
'signed' => false,
'comment' => '活跃时间',
'after' => 'deleted',
]);
}
if ($table->hasIndexByName('course_user')) {
$table->removeIndexByName('course_user');
}
$table->save();
}
protected function alterChapterUserTable()
{
$table = $this->table('kg_chapter_user');
if (!$table->hasColumn('deleted')) {
$table->addColumn('deleted', 'integer', [
'null' => false,
'default' => '0',
'limit' => MysqlAdapter::INT_REGULAR,
'signed' => false,
'comment' => '删除标识',
'after' => 'consumed',
]);
}
if (!$table->hasColumn('active_time')) {
$table->addColumn('active_time', 'integer', [
'null' => false,
'default' => '0',
'limit' => MysqlAdapter::INT_REGULAR,
'signed' => false,
'comment' => '活跃时间',
'after' => 'deleted',
]);
}
$table->save();
}
protected function dropCourseCategoryTable()
{
$table = $this->table('kg_course_category');
if ($table->exists()) {
$table->drop()->save();
}
}
protected function dropFlashSaleTable()
{
$table = $this->table('kg_flash_sale');
if ($table->exists()) {
$table->drop()->save();
}
}
protected function dropDanmuTable()
{
$table = $this->table('kg_danmu');
if ($table->exists()) {
$table->drop()->save();
}
}
protected function deleteCourseTeachers()
{
$this->getQueryBuilder()
->delete('kg_course_user')
->where(['role_type' => 2])
->execute();
}
protected function handleArticles()
{
/**
* 处理封面为空的记录
*/
$this->getQueryBuilder()
->update('kg_article')
->set('cover', '/img/default/article_cover.png')
->where(['cover' => ''])
->execute();
$articles = $this->getQueryBuilder()
->select('*')
->from('kg_article')
->where(['cover LIKE' => 'http%'])
->execute()->fetchAll(PDO::FETCH_ASSOC);
if (count($articles) == 0) return;
/**
* 去除封面URL中的域名
*/
foreach ($articles as $article) {
$matched = preg_match('/\/img\/content\/(.*?)$/', $article['cover'], $matches);
if ($matched) {
$cover = sprintf('/img/content/%s', $matches[1]);
$this->getQueryBuilder()
->update('kg_article')
->where(['id' => $article['id']])
->set('cover', $cover)
->execute();
}
}
}
protected function handleNavs()
{
$this->getQueryBuilder()
->delete('kg_nav')
->where(['url' => '/flash/sale'])
->execute();
}
protected function handleVips()
{
$this->getQueryBuilder()
->update('kg_vip')
->set('published', 1)
->execute();
}
}