PHP学习程序员PHP经验分享

《Thinkphp5入门系列课程》第十二课:Migration(

2017-09-17  本文已影响240人  6aec4f6b9d46

通过本文你可以学到:

上一篇文章中,作者给大家简单的介绍了 Migration 的使用,但是较为浅薄不够深入,很多小伙伴看完肯定意犹未尽,这篇文章就给小伙伴们深入的介绍 Migration 的使用咯。

表的方法

看过上一篇文章中我们都知道,在 Migration 文件中,我们通过:

$userTable = $this->table('users');

获取了表 users 的实例,获取这个实例之后我们就可以做很多关于表的操作咯,比如说下面这样:

$table->addColumn('nickname', 'string', ['limit' => 16, 'null' => false])
              ->addColumn('email', 'string', ['limit' => 32, 'null' => false])
              ->addColumn('password', 'string', ['limit' => 64, 'null' => false])
              ->setEngine('InnoDB')
              ->comment('用户表');
              ->create();

给表 users 增加三个字段,并指定使用 InnoDB 存储引擎,且给表打上 用户表 的注释。这是一个简单的实例,关于表的操作方法主要有下面这些方法:

方法 说明
setId(string $id) 设置主键字段名
setPrimaryKey(string $key) 设置主键
setEngine(string $engine) 设置存储引擎,有:InnoDB,MyISAM
setComment(string $comment) 设置表注释
addTimestamps(string $createAtName, string $updateAtName) 给表加上创建时间编辑时间两个字段,默认字段名是:create_time,update_time
addColumn($columnName, $type, $options) 给表增加一个字段
changeColumn($columnName, $newType, $options) 改变表的某一个字段的属性
create() 创建表
save() 保存表
rename($newTableName) 重命名表名
hasTable($tableName) | exists() 判断表是否存在
drop() 删除当前表
setIndexes(array $indexs) 批量设置索引
setForeignKeys(array $foreignKeys) 设置外键
removeColumn($columnName) 删除字段
renameColumn($oldName, $newName) 字段重命名
insert(array $data) 插入数据

列的方法

列我们主要从 addColumn($columnName, $type, $options) 这个方法的参数讲起,第一个参数:

参数一:列名

其实这里叫列名并不准确,但是我们姑且叫做列名,本着入门的原则,这里不过多的深入。

它的结构非常简单,字符串类型,符合Mysql的列名规范就可以啦,其它没有要说的。

参数二:列类型

到目前为止,可以支持下面这些类型:

类型
biginteger
binary
boolean
date
datetime
decimal
float
integer
string
text
time
timestamp
uuid

当MysqlVersion >= 5.7的时候,还有下面的类型:

类型
enum
set
blob
json

好咯,类型就说到这里了,自己对号入座。

参数三:可选参数

下面是所有字段类型均支持的可选参数:

参数 说明
limit 长度限制,整数
length limit,整数
default 默认值,mixed
null 是否可空,bool
after 在哪个字段后
comment 注释

下面是针对 decimal 类型:

参数 说明
precision 长度,整数
scale 小数位长度,整数
signed 是否无符号,bool

下面是针对 enumset 类型:

参数 说明
values 默认值

下面是针对 integerbiginteger 类型:

参数 说明
identity 自动递增,bool,默认false
signed 无符号,bool

下面是针对 timestamp 类型:

参数 说明
default 默认值,如:CURRENT_TIMESTAMP
update 字段更新时的动作,如:CURRENT_TIMESTAMP

好咯,列就说到这里啦。

自定义主键

看过上一篇的小伙伴们都知道,默认情况系统会给我们自动加上 id 字段的主键,但是如果我们想使用 uid 怎么办呢?可以这样:

$table = $this->table('users');
$table->setId('uid');

这样就可以啦。

自定义时间戳字段名

执行 addTimestamps() 方法系统会为我们自动加上 create_timeupdate_time 两个字段,但是如果是从 laravel 转过来的用户,肯定不习惯这个命名咯,想使用 created_atupdated_at 是最好不过啦,于是可以这样:

$table = $this->table('users');
$table->addTimestamps('created_at', 'updated_at');

注意,虽然这里修改了,但是你还需要修改下模型的文件,因为系统默认是 create_timeupdate_time ,比如说我们有个 User 模型,可以这样:

<?php

namespace app\common\model;

use think\Model;

class User extends Model
{
    
    // 创建时间字段
    protected $createTime = 'created_at';
    // 更新时间字段
    protected $updateTime = 'updated_at';

}

增加软删除 softDelete 字段

项目中有一些表的数据是不能直接删除的,只是修改成了不显示的状态,而 softDelete 的方案就很好的解决这个问题不仅可以标记记录的删除状态还记住了记录删除的时候,所以如果想要添加 softDelete 可以这样:

$table = $this->table('users');
$table->addSoftDelete();

系统为我们提供的方法并不是很友好,因为它的字段名默认就是 delete_time 而且无法修改,所以这种方法并不推荐,可以手动的添加:

$table = $this->table('users');
$table->addColumn('delete_time', 'timestamp', ['null' => true]);

好了今天的教程就到这里啦。此篇是小滕的《Thinkphp5入门系列课程》第十二课:Migration(二)。
喜欢的给个订阅呗!
由于作者水平有限,如有错误请欢迎指正。

上一篇下一篇

猜你喜欢

热点阅读