Laravel数据表操作

Posted by JKJUN on July 13, 2018

背景

### 一般的项目,都是事先规定好数据库,然后进行操作。但是最近做的一个项目需要动态的创建数据表,因此学习了一下laravel的数据表操作,以此整理一下。

创建表

使用 Schema 的 create

  • 方法来创建新的数据表。create方法接收两个参数,第一个是表名,第二个是获取用于定义新表的 Blueprint 对象的闭包:
    Schema::create('users', function ($table) {
      $table->increments('id');
    });
    
  • 当然,创建新表的时候,可以使用 Schema 构建器中的任意列方法来定义数据表的列。

    检查表/列是否存在

    你可以轻松地使用 hasTable 和 hasColumn 方法检查表或列是否存在: ``` if (Schema::hasTable(‘users’)) { // }

if (Schema::hasColumn(‘users’, ‘email’)) { // }

### 连接 & 存储引擎
* 如果你想要在一个数据库连接上执行表结构操作,而该数据库连接并不是默认数据库连接,可以使用connection 方法:

Schema::connection(‘foo’)->create(‘users’, function ($table) { $table->increments(‘id’); });

* 要设置表的存储引擎,在 Schema 构建器上设置 engine 属性:

Schema::create(‘users’, function ($table) { $table->engine = ‘InnoDB’; $table->increments(‘id’); });

### 重命名/删除表
* 要重命名一个已存在的数据表,使用 rename 方法:

Schema::rename($from, $to);

* 要删除一个已存在的数据表,可以使用 drop 或 dropIfExists 方法:

Schema::drop(‘users’); Schema::dropIfExists(‘users’);

### 通过外键重命名表
* 在重命名表之前,需要验证该表包含的外键在迁移文件中有明确的名字,而不是 Laravel 基于惯例分配的名字。否则,外键约束名将会指向旧的数据表。

# 数据列操作
### 创建数据列
* 要更新一个已存在的表,使用 Schema 门面上的 table 方法,和 create 方法一样,table 方法接收两个参数:表名和获取用于添加列到表的 Blueprint 实例的闭包:

Schema::table(‘users’, function ($table) { $table->string(‘email’); });

* 可用的类型有很多

命令 描述 $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 ```