1)创建表(make:migration create),例如创建 articles

php artisan make:migration create_articles_table --create=articles

运行命令后,会在 /database/migrations/ 生成对应的数据库迁移文件,通过修改文件里的 up 方法 和 down 文件,来创建数据表和删除数据表

public function up()
{
Schema::create('articles', function (Blueprint $table) {
$table->increments('id');
$table->string('title',50);
$table->longText('content');
$table->timestamps();
});
}
public function down()
{
Schema::drop('articles');
}

运行 php artisan migrate 命令后,即可生效

PS:cretae 创建表时,字段要想得完善一些,后期不能修改这个文件了(修改或删除字段,需要新建一个数据库迁移文件,下面说)

详情的字段类型和操作,看这里 http://laravelacademy.org/post/6171.html#ipt_kb_toc_6171_8

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

非空、默认值等修改操作看这里 http://laravelacademy.org/post/6171.html#ipt_kb_toc_6171_10

修改器 描述
->after('column') 将该列置于另一个列之后 (仅适用于MySQL)
->comment('my comment') 添加注释信息
->default($value) 指定列的默认值
->first() 将该列置为表中第一个列 (仅适用于MySQL)
->nullable() 允许该列的值为NULL
->storedAs($expression) 创建一个存储生成列(只支持MySQL)
->unsigned() 设置 integer 列为 UNSIGNED
->virtualAs($expression) 创建一个虚拟生成列(只支持MySQL)

2)修改已创建的数据表字段(make:migration add)

想要修改已创建的数据表,不能直接改原来的 migrate 文件,要新建一个迁移文件,命令如下:

php artisan make:migration add_description_to_articles_table --table=articles
php artisan make:migration change_description_on_articles_table --table=articles

PS:其实migrate 文件的名字是怎么的都无所谓的,主要是里面的内容,不过名字都是要尽量写规范一点,让别人看到名字就知道是什么意思

添加或修改字段的操作是非常相似的,后者只是多了一个change()方法

新增字段:

public function up()
{
Schema::table('articles', function (Blueprint $table) {
$table->string('description')->nullable()->after('title');
});
} public function down()
{
Schema::table('articles', function (Blueprint $table) {
$table->dropColumn('description');
});
}

修改字段:

public function up()
{
Schema::table('articles', function (Blueprint $table) {
$table->string('description', 200)->change();
});
} public function down()
{
Schema::table('articles', function (Blueprint $table) {
//
});
}

运行 php artisan migrate 命令后,即可生效

3)使用索引

可用索引类型:

命令 描述
$table->primary('id'); 添加主键索引
$table->primary(['first', 'last']); 添加混合索引
$table->unique('email'); 添加唯一索引
$table->unique('state', 'my_index_name'); 指定自定义索引名称,如果不指定,laravel会自动给它起个名字
$table->index('state'); 添加普通索引

删除索引:

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

外键约束(references...on...):

Schema::table('posts', function ($table) {
$table->integer('user_id')->unsigned();
$table->foreign('user_id')->references('id')->on('users');
});

删除外键索引:

$table->dropForeign('user_id');

更详细的文档看这里:http://laravelacademy.org/post/6171.html

laravel 数据库操作(表、字段)的更多相关文章

  1. 第三百零七节,Django框架,models.py模块,数据库操作——表类容的增删改查

    Django框架,models.py模块,数据库操作——表类容的增删改查 增加数据 create()方法,增加数据 save()方法,写入数据 第一种方式 表类名称(字段=值) 需要save()方法, ...

  2. 五 Django框架,models.py模块,数据库操作——表类容的增删改查

    Django框架,models.py模块,数据库操作——表类容的增删改查 增加数据 create()方法,增加数据 save()方法,写入数据 第一种方式 表类名称(字段=值) 需要save()方法, ...

  3. laravel 数据库操作

    1 配置信息 1.1配置目录: config/database.php 1.2配置多个数据库 //默认的数据库 'mysql' => [ 'driver' => 'mysql', 'hos ...

  4. Laravel—数据库操作与Eloquent模型使用总结

    数据库操作 执行原生SQL //查询 $emp = DB::select('select * from employees where emp_no = 1'); $emp = DB::select( ...

  5. Laravel 数据库操作 Eloquent ORM

    laravel 操作数据库一般都使用它的Eloquent ORM才操作 建立模型 <?php namespace App; use Illuminate\Database\Eloquent\Mo ...

  6. laravel 数据库操作之 DB facade & 查询构造器 & Eloquent ORM

    <?php namespace App\Http\Controllers; use App\Student; use Illuminate\Support\Facades\DB; class S ...

  7. [ Laravel 5.6 文档 ]laravel数据库操作分页(自定义分页实现和自定义分页样式)

    简介 在其他框架中,分页可能是件非常痛苦的事,Laravel 让这件事变得简单.易于上手.Laravel 的分页器与查询构建器和 Eloquent ORM 集成在一起,并开箱提供方便的.易于使用的.基 ...

  8. DB2数据库操作XMl字段

    1.xml查询语句 ① 查询xml中的单个节点内容 select TM_PRM_OBJECT.ORG , TM_PRM_OBJECT.PARAM_CLASS , TM_PRM_OBJECT.PARAM ...

  9. laravel数据库操作

    一.配置文件路径:/.env DB_CONNECTION=mysql DB_HOST=127.0.0.1 DB_PORT= DB_DATABASE=test DB_USERNAME=root DB_P ...

随机推荐

  1. CentOS 7 - 更新JDK,删除旧JDK,安装新JDK

    一,检查是否安装JDK. yum list installed | grep java 二,删除旧JDK. yum -y remove java-1.7.0-openjdk* yum -y remov ...

  2. C++ 知识回顾总结 -- 指针

    指针是一种特殊类型的变量,用于存储值的地址,因此,指针名表示的是地址.*运算符被成为间接值或解除引用运算符,将其应用于指针,可以得到该地址存储的值. 对指针的理解可以参照以下的例子: #include ...

  3. Centos 基本命令不能用恢复方法

    遇到命令都不能用,直接执行下面的语句就可以: export PATH=/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin:/roo ...

  4. Robot Framework - 2 - 创建测试库

    04- 创建测试库--基础概念 Robot Framework 实际的测试能力是由测试库提供的. ***** 支持的编程语言 Robot Framework 自身是用 Python 编写的,能使用 P ...

  5. 课程五(Sequence Models),第二 周(Natural Language Processing & Word Embeddings) —— 0.Practice questions:Natural Language Processing & Word Embeddings

    [解释] The dimension of word vectors is usually smaller than the size of the vocabulary. Most common s ...

  6. mysql 开发基础系列17 存储过程和函数(上)

    一. 概述 存储过程和函数是事先经过编译并存储在数据库中的一段sql语句集合,可以简化应用开发人员的很多工作,减少数据在数据库与应用服务器之间的传输,提高数据处理效率是有好处的.存储过程和函数的区别在 ...

  7. 我可能不懂Array.prototype.sort

    今天 fix 我们后台系统的一些 bug.系统是基于 beego 和模板开发的,各种前后端代码揉作一团,没有格式,没有 eslint,全局变量满天飞,连 js 代码都有后端的插值,读起来非常 酸爽. ...

  8. Django | 页面数据的缓存与使用

    为什么要使用缓存? 一个动态网站的基本权衡点就是,它是动态的. 每次用户请求页面,服务器会重新计算.从开销处理的角度来看,这比你读取一个现成的标准文件的代价要昂贵的多 使用缓存,将多用户访问时基本相同 ...

  9. spring-boot-2.0.3启动源码篇三 - run方法(二)之prepareEnvironment

    前言 此系列是针对springboot的启动,旨在于和大家一起来看看springboot启动的过程中到底做了一些什么事.如果大家对springboot的源码有所研究,可以挑些自己感兴趣或者对自己有帮助 ...

  10. 值得关注的10个python语言博客

    大家好,还记得我当时学习python的时候,我一直努力地寻找关于python的博客,但我发现它们的数量很少.这也是我建立这个博客的原因,向大家分享我自己学到的新知识.今天我向大家推荐10个值得我们关注 ...