首页 » 网站推广 » phpxcatmigrate技巧_3分钟短文一看就是干货Laravel迁移数据库

phpxcatmigrate技巧_3分钟短文一看就是干货Laravel迁移数据库

访客 2024-12-09 0

扫一扫用手机浏览

文章目录 [+]

MVC - CVM - VMC,到底缺了哪一个呢?M!

M = Model,是模型层,是与数据库直接对接的那一层设计。
我们都知道统统运用的根本,是数据库。
数据库也是IT工业的珠穆朗玛峰,看当今天下,多少大中小微企业,哪个不是被数据库卡着脖子。

phpxcatmigrate技巧_3分钟短文一看就是干货Laravel迁移数据库

以是美国假如哪天让Oracle,Microsoft等公司限定出口数据库产品,我们海内的数据库能不能顶上,还未可知。

phpxcatmigrate技巧_3分钟短文一看就是干货Laravel迁移数据库
(图片来自网络侵删)

好了,扯得有点远了,说说本期的要点吧。
我们本期要利用laravel自带的迁移功能,在不操作任何数据库的条件下,完成根本的数据构建。

迁移文件

本文假设你已经精确地配置了环境变量文件,并且通过数据库配置项,系统已经可以正常连接到数据库了。
在项目文件里,不出意外你会在目录 database/migrations 下创造 2014_10_12_000000_create_users_table.php 文件, 这个是laravel自带的用于创建 users 表的迁移文件。
只假如实现了两个方法,一个是 up 用于实行命令,一个是 down 用于回滚操作。

来看一下初始的内容,首先是 up 方法:

public function up(){ Schema::create('users', function (Blueprint $table) { $table->increments('id'); $table->string('name'); $table->string('email')->unique(); $table->string('password', 60); $table->rememberToken(); $table->timestamps(); });}

我们紧张关心的是字段的数据类型,以及默认值约束,唯一性约束等等。
而字段类型也做的很直不雅观,string 对应 varchar 类型。
比如主键默认的自增 id,还有用于记录创建韶光 created_at 和 更新韶光 updated_at,一个 timestamps() 方法就包含了, 只不过默认利用的是不直不雅观的整型韶光戳,如果要利用 datetime 格式用于直不雅观地读取,则可以手动声明:

$table->dateTime('created_at')->comment('创建韶光');$table->dateTime('updated_at')->comment('更新韶光');

与创建表方法对应的是回滚时候的删除表,下面是默认的 down 方法:

public function down(){ Schema::drop('users');}

实在这个写法有点不保险,如果 users 表不存在的话,我们并不须要实行这条命令。
以是,可以完善性地添加一个存在条件判断:

Schema::dropIfExists('users');

这样天生的便是类似下面的额 SQL 语句:

DROP TABLE IF EXISTS databse_name.users;

迁移文件准备完毕,要将该功能运用起来,只需在命令行输入:

php artisan migrate

系统就会实行迁移文件内的内容,并组装好SQL语句发送给数据库实行。

独立重生

那么,上面的是系统自带的迁移文件,开拓者如何自己手动天生呢?实在laravel供应了齐备的命令行脚手架, 下面的方法都可以用于创建一个迁移文件:

php artisan make:migration create_users_tablephp artisan make:migration add_votes_to_users_table --table=usersphp artisan make:migration create_users_table --create=users

第一个仅仅指定了迁移文件名称,一样平常我们给它起一个直不雅观的名字,方便给自己和掩护者提个醒 :-)

第二个利用了 --table 选项指定该迁移文件是对哪个表起浸染的。

第三个利用了 --create 选项,这样不仅创建了迁移文件,还顺带着把模型给建好了,一石二鸟!

创建新表没啥好说的,字段类型一定要选好,如果写好了,又进行了迁移,数据库也生效了,这时候,半路上要修正字段类型, 最好数据库里没数据,假如有,可就要遭殃,比如说原来是 varchar(50),有的字段写满了50个字符,现在要修正为 varchar(20), 数据库是不许可的。

可以向上扩展,向下,对不起,数据库说 NO!
怎么办?只好手动处理数据到得当的长度再做修正。

而在 laravel 里对一个空表修正字段,完备可以通过,我们创建新的迁移文件,然后在 up 方法内这样调用:

$table->string('name', 100)->change();

看,只用调用一个 change 方法,就搞定了。
这个方法终极利用的是类似下面的SQL语句:

alter table `users` alter `name` varchar(100);

当然还可以对字段的默认值约束进行修正:

$table->string('deleted_at')->nullable()->change();

对付插入新的字段,还可以指定位于哪个字段之前或者之后:

$table->string('email')->nullable()->after('last_name');

仅仅修正字段名,只需调用对应方法:

$table->renameColumn('promoted', 'is_promoted');

或者在回滚方法中对某些新增的字段进行删除:

$table->dropColumn('votes');

常用的约束比如主键约束,联合主键约束,唯一性约束,和索引约束。
也可以很方便地在声明表,或者修正表的时候进行调用:

$table->primary('primary_id'); // 指定主键$table->primary(['first_name', 'last_name']); // 联合主键

还有唯一性约束,为存在的字段创建:

$table->unique('email'); // 唯一性$table->unique('email', 'optional_custom_index_name'); // 指定索引名

为字段创建索引:

$table->index('amount'); // 索引$table->index('amount', 'optional_custom_index_name'); // 指定索引名

过于繁芜的数据库方面的约束,触发器,存储过程,事务等等,是我们所不提倡的,由于溯源有些困难。
上面给的这些个方法,足够应对很多很多场景了。

写在末了

本文先容了laravel中利用迁移功能操作数据库的创建,修正,移除字段,删除表等,把开拓者从手动掩护数据库的状态中解脱出来。
这样也为团队协作时的有章可循做了铺垫。

成熟的开拓团队,该当有规范的制度,特殊是底层的数据库构造,大家约束在编程层面,方便利用代码库管控和全程追溯。
这非常值得推举。

Happy coding :-)

我是@程序员小助手,专注编程知识,圈子动态的IT领域原创作者

标签:

相关文章