Laravel 8 数据库操作 >> 创建表

本文介绍了在 Laravel 8 中创建数据库表的两种方法:通过代码和使用迁移(migration)。首先展示了如何在控制器中创建表,并通过视图文件和路由展示结果。接着详细说明了使用 migration 和 artisan 命令创建表的过程,包括创建 migration 文件、自定义表结构、执行迁移以创建表。最后提到了一些常见的创建表的命令。

创建表的方式有两种,一种是通过代码层面来执行创建表的操作,一种是使用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

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值