简介

Laravel 的 Schema 类提供了一种与数据库无关的方式维护表。它和 Laravel 所支持的所有数据库都能很好的工作,并且提供了统一的接口。

创建和删除表

使用 Schema::create 创建一个数据库的表:

Schema::create('users', function($table)
{
$table->increments('id');
});

传递给 create 函数的第一个参数是表的名字,第二个参数是一个闭包,将接受一个 Blueprint 对象用于定义新的表。

使用 rename 函数重命名一个已存在的表:

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

使用 Schema::connection 函数指定结构操作所使用的数据库连接:

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

使用 Schema::drop 函数删除一个表:

Schema::drop('users');

Schema::dropIfExists('users');

添加字段

使用 Schema::table 函数更新一个已存在的表:

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

表生成器包含一系列的字段类型用于构建表:

命令 描述
$table->bigIncrements('id'); Incrementing ID using a "big integer" equivalent.
$table->bigInteger('votes'); BIGINT equivalent to the table
$table->binary('data'); BLOB equivalent to the table
$table->boolean('confirmed'); BOOLEAN equivalent to the table
$table->date('created_at'); DATE equivalent to the table
$table->dateTime('created_at'); DATETIME equivalent to the table
$table->decimal('amount', 5, 2); DECIMAL equivalent with a precision and scale
$table->double('column', 15, 8); DOUBLE equivalent with precision
$table->enum('choices', array('foo', 'bar')); ENUM equivalent to the table
$table->float('amount'); FLOAT equivalent to the table
$table->increments('id'); Incrementing ID to the table (primary key).
$table->integer('votes'); INTEGER equivalent to the table
$table->longText('description'); LONGTEXT equivalent to the table
$table->mediumText('description'); MEDIUMTEXT equivalent to the table
$table->morphs('taggable'); Adds INTEGER taggable_id and STRING taggable_type
$table->smallInteger('votes'); SMALLINT equivalent to the table
$table->softDeletes(); Adds deleted_at column for soft deletes
$table->string('email'); VARCHAR equivalent column
$table->string('name', 100); VARCHAR equivalent with a length
$table->text('description'); TEXT equivalent to the table
$table->time('sunrise'); TIME equivalent to the table
$table->timestamp('added_on'); TIMESTAMP equivalent to the table
$table->timestamps(); Adds created_at and updated_at columns
->nullable() Designate that the column allows NULL values
->default($value) Declare a default value for a column
->unsigned() Set INTEGER to UNSIGNED

如果你使用 MySQL 数据库,您可以使用 after 函数指明字段的顺序:

在 MySQL 中使用 After

$table->string('name')->after('email');

重命名字段

使用 renameColumn 函数重命名一个字段:

重命名一个字段

Schema::table('users', function($table)
{
$table->renameColumn('from', 'to');
});

注意: 不支持重命名 enum 字段类型.

删除字段

从表中删除一个字段

Schema::table('users', function($table)
{
$table->dropColumn('votes');
});

从表中删除多个字段

Schema::table('users', function($table)
{
$table->dropColumn('votes', 'avatar', 'location');
});

检查存在性

您可以使用 hasTable 和 hasColumn 检查一个表或一个字段是否存在:

检查表是否存在

if (Schema::hasTable('users'))
{
//
}

检查字段是否存在

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

添加索引

结构生成器支持多种类型的索引,有两种方法可以添加它们。首先,您可以在字段定义后链式的定义它们,或者独立的添加它们:

链式创建一个字段和索引

$table->string('email')->unique();

或者,您可以选择在不同的行添加索引。下面是全部支持的索引类型:

命令 描述
$table->primary('id'); 添加一个主键
$table->primary(array('first', 'last')); 添加组合键
$table->unique('email'); 添加唯一键
$table->index('state'); 添加一个索引

外键

Laravel 也支持向表中添加外键约束:

向表中添加外键

$table->foreign('user_id')->references('id')->on('users');

在这个例子中,我们指明 user_id 字段参照 users 表中的 id 字段。

您也可以指明 "on delete" 以及 "on update" 行为选项:

$table->foreign('user_id')
->references('id')->on('users')
->onDelete('cascade');

可以使用 dropForeign 函数删除一个外键。像其他索引一样,一个相似的命名惯例被使用于外键的命名:

$table->dropForeign('posts_user_id_foreign');

注意: 当创建一个参照递增整数类型的外键的时候,记得把外键字段的类型定义为无符号。

删除索引

为了删除索引,必须指明索引的名字。Laravel 默认为索引分配了一个合理的名字。通过连接表明、索引的字段名以及索引类型的形式。这里是一些例子:

命令 描述
$table->dropPrimary('users_id_primary'); 从 "users" 表中删除一个主键
$table->dropUnique('users_email_unique'); 从 "users" 表中删除一个唯一键
$table->dropIndex('geo_state_index'); 从 "geo" 表中删除一个索引

存储引擎

通过在结构生成器设置 engine 属性为表设置存储引擎:

Schema::create('users', function($table)
{
$table->engine = 'InnoDB'; $table->string('email');
});

Laravel结构生成器的更多相关文章

  1. Laravel学习笔记(五)数据库 数据库迁移案例2——创建数据结构,数据表,修改数据结构

    默认假设 所有的列在定义的时候都有默认的假设,你可以根据需要重写. Laravel假定每个表都有一个数值型的主键(通常命名为”id”),确保新加入的每一行都是唯一的.Laravel只有在每个表都有数值 ...

  2. php框架laravel:数据库建立:artisan

    aravel 迁移是一种数据库的版本控制.迁移通常和 结构生成器 配对使用来管理您应用程序的数据库结构. 配置数据库 我们安装wamp,并且使用mysql方式.用wamp自带的phpMyAdmin添加 ...

  3. 使用laravel 的artisan快速创建表

    参考:使用laravel 的artisan快速创建表 字段类型参考链接: 结构生成器 版本: Laravel 4.2 1. 创建migrate 文件 php artisan migrate:make ...

  4. [转]Laravel 4之数据库操作

    Laravel 4之数据库操作 http://dingjiannan.com/2013/laravel-database/ 数据库配置 Laravel数据库配置在app/config/database ...

  5. Laravel 5.2 教程 - 迁移

    一.简介 迁移(Migrations)是一种数据库的版本控制.可以让团队在修改数据库结构的同时,保持彼此的进度一致.迁移通常会和 结构生成器 一起使用,可以简单的管理数据库结构. 下面以创建学生表的迁 ...

  6. laravel中migration 数据迁移

    简介 数据库迁移就像是数据库的版本控制,可以让你的团队轻松修改并共享应用程序的数据库结构.迁移通常与 Laravel 的数据库结构生成器配合使用,让你轻松地构建数据库结构.如果你曾经试过让同事手动在数 ...

  7. Laravel - 基础

    1.使用 composer 创建项目 composer create-project --prefer-dist laravel/laravel blog 报错1 [ErrorException]pr ...

  8. Laravel学习笔记(三)数据库 数据库迁移

    该章节内容翻译自<Database Migration using Laravel>,一切版权为原作者. 原作者:Stable Host, LLC 翻译作者:Bowen Huang 正文: ...

  9. .net转php laraval框架学习系列(二)项目实战---Models

    上一篇已经介绍开发环境的搭建,如果有问题可以在文章后留言. 这篇将从项目实战开发,一步一步了解laravel框架. 在开发mvc项目时,models都是第一步. 下面就从建模开始. 实体关系图 由于不 ...

随机推荐

  1. 使用Prometheus搞定微服务监控

    最近对服务进行监控,而当前监控最流行的数据库就是 Prometheus,同时 go-zero 默认接入也是这款数据库.今天就对 go-zero 是如何接入 Prometheus ,以及开发者如何自己定 ...

  2. Android中Context样式分析

    目录 1.样式定义以及使用 1.1.默认样式 1.2.样式定义及使用 1.3.当前样式下attr属性的获取 1.4.属性集合的定义与获取 2.Activity中Theme的初始化流程 2.1.系统调用 ...

  3. dubbo实战之一:准备和初体验

    欢迎访问我的GitHub https://github.com/zq2599/blog_demos 内容:所有原创文章分类汇总及配套源码,涉及Java.Docker.Kubernetes.DevOPS ...

  4. 05.从0实现一个JVM语言之目标平台代码生成-CodeGenerator

    从0实现JVM语言之目标平台代码生成-CodeGenerator 源码github仓库, 如果这个系列文章对你有帮助, 希望获得你的一个star 本节相关代码生成package地址 阶段性的告别 非常 ...

  5. 在Linux上从零开始部署前后端分离的Vue+Spring boot项目

    最近做了一个前后端分离的商城项目来熟悉开发的整个流程,最后希望能有个正式的部署流程,于是试着把项目放在云服务器上,做了一下发现遇到了不少问题,借此记录一下整个部署的过程. 使用的技术栈如标题所说大体上 ...

  6. 关于搬运CSDN上学生信息管理系统的阅读与二次开发

    关于本篇博客内容,我大概分成了三个部分进行讲述:对于源代码的解读.二次重开发后程序的介绍和自己在做完对他人代码的解读和重开发后自己的一些感想. 一.  源代码的解读 在本部分的解读中主要分为三部分:该 ...

  7. 测试工程师Docker进阶

    学习整理来源 B站 狂神说Java https://space.bilibili.com/95256449/ 四.docker镜像 1.镜像是什么 镜像是一种轻量级.可执行的独立软件包,用来打包软件运 ...

  8. Redis工具收费后新的开源已出现

    作者:三十三重天 博客: zhouhuibo.club 引言 Redis工具哪家强,中国山东找蓝翔.哎呀,串台了. 众所周知,开源的最终还是收费. Reids Desktop 秉承了这一理念,苦逼的程 ...

  9. [源码解析] 分布式任务队列 Celery 之启动 Consumer

    [源码解析] 分布式任务队列 Celery 之启动 Consumer 目录 [源码解析] 分布式任务队列 Celery 之启动 Consumer 0x00 摘要 0x01 综述 1.1 kombu.c ...

  10. PAT (Basic Level) Practice (中文)1070 结绳 (25 分) 凌宸1642

    PAT (Basic Level) Practice (中文)1070 结绳 (25 分) 凌宸1642 题目描述 给定一段一段的绳子,你需要把它们串成一条绳.每次串连的时候,是把两段绳子对折,再如下 ...