本书未发布
3.2. 定义文档表结构
接下来,我们需要编辑迁移文件,定义文档表的结构。
步骤:
- 打开
database/migrations/xxxx_xx_xx_create_documents_table.php
文件(文件名中的时间戳部分可能不同)。 - 修改
up
方法,添加所需的字段:
<?php
use Illuminate\Database\Migrations\Migration;
use Illuminate\Database\Schema\Blueprint;
use Illuminate\Support\Facades\Schema;
class CreateDocumentsTable extends Migration
{
/**
* 运行迁移
*
* @return void
*/
public function up()
{
Schema::create('documents', function (Blueprint $table) {
$table->id()->comment('文档ID'); // 文档ID
$table->unsignedBigInteger('user_id')->comment('用户ID,关联到users表'); // 用户ID,关联到users表
$table->string('name')->comment('文档名称'); // 文档名称
$table->string('slug')->unique()->comment('文档slug,唯一'); // 文档slug,唯一
$table->text('description')->nullable()->comment('文档描述,可为空'); // 文档描述,可为空
$table->string('cover_image')->nullable()->comment('封面图片URL,可为空'); // 封面图片URL,可为空
$table->boolean('is_chaptered')->default(false)->comment('是否分章节,默认否'); // 是否分章节,默认否
$table->boolean('auto_numbering')->default(false)->comment('自动编号,默认否'); // 自动编号,默认否
$table->boolean('auto_toc')->default(false)->comment('自动生成目录,默认否'); // 自动生成目录,默认否
$table->boolean('is_public')->default(true)->comment('是否公开,默认是'); // 是否公开,默认是
$table->string('password')->nullable()->comment('访问密码,可为空'); // 访问密码,可为空
$table->timestamps(); // 创建和更新时间
$table->foreign('user_id')->references('id')->on('users')->onDelete('cascade')->comment('外键约束,关联到users表的id字段,当用户被删除时,删除关联的文档'); // 外键约束,关联到users表的id字段,当用户被删除时,删除关联的文档
});
// 为表添加中文注释
DB::statement("ALTER TABLE documents COMMENT = '文档表'");
}
/**
* 回滚迁移
*
* @return void
*/
public function down()
{
Schema::dropIfExists('documents'); // 删除文档表
}
}
解释:
- 字段定义:为文档表定义了各种字段,包括文档名称、描述、封面、是否分章节等。
- 外键:
user_id
字段是外键,关联到用户表,表示文档的创建者。 comment
方法:用于为表字段添加注释,table->comment('注释内容')
。DB::statement
方法:用于执行原生SQL语句,ALTER TABLE documents COMMENT = '文档表'
为整个表添加注释。
好处:
- 结构清晰:定义文档表的结构,使数据库设计更加清晰。
- 数据完整性:通过外键约束,确保数据的完整性。
推荐文章: