创建表的方式有两种,一种是通过代码层面来执行创建表的操作,一种是使用migration的方式使用artisan命令来执行创建表的操作
下面先提共一个通过代码来创建表的 demo,创建或者指定一个controller,添加一个 createTable的方法,方法调用的结果通过 demo.blade.php 的视图文件展示,如下图:
use Illuminate\Support\Facades\Schema;
use Illuminate\Database\Schema\Blueprint;
public function createMyTable()
{
$tableName = "my_demo_examples";
if (Schema::hasTable($tableName)) {
// 表存在
return view('demo',['MyWords' => 'Table '.$tableName.' exist']);
} else {
// 表不存在
Schema::create($tableName, function (Blueprint $table){
$table->id('Id');
$table->string('UserName');
$table->integer('Age');
$table->timestamps();
});
return view('demo',['MyWords' => 'Table '.$tableName.' not exist, create done']);
}
}
注:Schema里的方法继承来源于 \vendor\laravel\framework\src\Illuminate\Database\Schema\Builder.php
在视图文件里输出调用的函数的结果展示
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title>Test Demo</title>
</head>
<body>
<div>
{{ $MyWords ?? '' }}
</div>
</body>
</html>
然后在 web.php 里定义一个路由来调用这个函数
Route::get('/create_table', [App\Http\Controllers\MyController::class, 'createMyTable']);
然后在浏览器运行 http://your-local-host/create_table,若表创建成功,会显示,如下图:

去 http://your-local-host:8081 看下表是否创建成功,如下图:

表已创建成功,这时在浏览器再运行 http://your-local-host/create_table,会提示表已存在,如下图:

另一种方式是通过 migration 来创建表,首先通过 Windows PowerShell 在 laradock 里启动容器并进入容器,切换到项目目录下,然后创建 migration 文件,输入命令如下:
命令对于文件的生成有固定格式,以 create 开头,以 table 结尾,中间为你要创建的表名,以 '_' 来连接,如下:
php artisan make:migration create_my_demo_examples_table
生成文件的类名为
CreateMyDemoExamples extends Migration {
public function up()
{
Schema::create('my_demo_examples', function (Blueprint $table) {
$table->id();
$table->timestamps();
});
}
}
命令执行后,会在 \databases\migrations\ 下生成一个 migration 文件,如下图:

根据你自定应的表结构,修改文件内的 up 方法,如下图:

修改成功后,在 laravel 项目下执行如下命令,如下图:
php artisan migrate
如在生成完文件后对文件名有修改,需要清理缓存并重启docker,再运行这个命令
此时表已创建成功
下面是一些创建表的命令
$table->bigIncrements('id'); 自增ID,类型为bigint
$table->bigInteger('votes'); 等同于数据库中的BIGINT类型
$table->binary('data'); 等同于数据库中的BLOB类型
$table->boolean('confirmed'); 等同于数据库中的BOOLEAN类型
$table->char('name', 4); 等同于数据库中的CHAR类型
$table->date('created_at'); 等同于数据库中的DATE类型
$table->dateTime('created_at'); 等同于数据库中的DATETIME类型
$table->dateTimeTz('created_at'); 等同于数据库中的DATETIME类型(带时区)
$table->decimal('amount', 5, 2); 等同于数据库中的DECIMAL类型,带一个精度和范围
$table->double('column', 15, 8); 等同于数据库中的DOUBLE类型,带精度, 总共15位数字,小数点后8位.
$table->enum('choices', ['foo', 'bar']); 等同于数据库中的 ENUM类型
$table->float('amount'); 等同于数据库中的 FLOAT 类型
$table->increments('id'); 数据库主键自增ID
$table->integer('votes'); 等同于数据库中的 INTEGER 类型
$table->ipAddress('visitor'); 等同于数据库中的 IP 地址
$table->json('options'); 等同于数据库中的 JSON 类型
$table->jsonb('options'); 等同于数据库中的 JSONB 类型
$table->longText('description'); 等同于数据库中的 LONGTEXT 类型
$table->macAddress('device'); 等同于数据库中的 MAC 地址
$table->mediumIncrements('id'); 自增ID,类型为无符号的mediumint
$table->mediumInteger('numbers'); 等同于数据库中的 MEDIUMINT类型
$table->mediumText('description'); 等同于数据库中的 MEDIUMTEXT类型
$table->morphs('taggable'); 添加一个 INTEGER类型的 taggable_id 列和一个 STRING类型的 taggable_type列
$table->nullableTimestamps(); 和 timestamps()一样但允许 NULL值.
$table->rememberToken(); 添加一个 remember_token 列: VARCHAR(100) NULL.
$table->smallIncrements('id'); 自增ID,类型为无符号的smallint
$table->smallInteger('votes'); 等同于数据库中的 SMALLINT 类型
$table->softDeletes(); 新增一个 deleted_at 列 用于软删除.
$table->string('email'); 等同于数据库中的 VARCHAR 列 .
$table->string('name', 100); 等同于数据库中的 VARCHAR,带一个长度
$table->text('description'); 等同于数据库中的 TEXT 类型
$table->time('sunrise'); 等同于数据库中的 TIME类型
$table->timeTz('sunrise'); 等同于数据库中的 TIME 类型(带时区)
$table->tinyInteger('numbers'); 等同于数据库中的 TINYINT 类型
$table->timestamp('added_on'); 等同于数据库中的 TIMESTAMP 类型
$table->timestampTz('added_on'); 等同于数据库中的 TIMESTAMP 类型(带时区)
$table->timestamps(); 添加 created_at 和 updated_at列
$table->timestampsTz(); 添加 created_at 和 updated_at列(带时区)
$table->unsignedBigInteger('votes'); 等同于数据库中无符号的 BIGINT 类型
$table->unsignedInteger('votes'); 等同于数据库中无符号的 INT 类型
$table->unsignedMediumInteger('votes'); 等同于数据库中无符号的 MEDIUMINT 类型
$table->unsignedSmallInteger('votes'); 等同于数据库中无符号的 SMALLINT 类型
$table->unsignedTinyInteger('votes'); 等同于数据库中无符号的 TINYINT 类型
$table->uuid('id'); 等同于数据库的UUID
本文介绍了在 Laravel 8 中创建数据库表的两种方法:通过代码和使用迁移(migration)。首先展示了如何在控制器中创建表,并通过视图文件和路由展示结果。接着详细说明了使用 migration 和 artisan 命令创建表的过程,包括创建 migration 文件、自定义表结构、执行迁移以创建表。最后提到了一些常见的创建表的命令。
1万+

被折叠的 条评论
为什么被折叠?



