mysql-Laravel迁移外键取决于种子数据
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了mysql-Laravel迁移外键取决于种子数据,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含1641字,纯文字阅读大概需要3分钟。
内容图文
![mysql-Laravel迁移外键取决于种子数据](/upload/InfoBanner/zyjiaocheng/885/a82029fd58fd48309cda40aaad587614.jpg)
我需要通过迁移和播种数据库来更新现有的Laravel应用程序.
我有一个如下表:
项目
> ID
>名称
我想将数据库编辑为:
项目
> ID
>名称
> type_id(新列)
类型(新表)
> ID
>名称
type_id是类型表的非空外键.
在接下来的操作中,类型表将使用Laravel播种器播种.每次应用程序更新后将调用此种子服务器,并截断/重新插入一些仅随应用程序更新而变化的“静态”数据.针对本地/生产差异的配置方式类似于Laravel : Migrations & Seeding for production data
从头开始在本地数据库上运行一切正常.但是在生产数据库上,已经有很多记录.由于它是一个非空键,因此当推送到该数据库(实际上是该数据库的副本以进行测试)时,迁移将失败
作为一种迁移解决方案,我想将第一个类型记录添加到每个现有项目中,但是由于在此阶段项目表为空,因此我无法在迁移过程中设置外键,并且在播种之前不能将其保留为空. ,因为迁移不会通过.
我认为有些事情:
>在整个更新过程中禁用数据库的外键检查,但是我更喜欢一个解决方案,该解决方案允许我将存储库简单地推送到服务器并启动自动部署脚本(本质上称为artisan migration,其后是artisan db:seed ).
>创建类型表后,立即从迁移中调用播种器,但是我不确定这是一个好习惯
我该怎么办 ?
编辑:这是我使用@lukasgeiter答案的工作迁移代码:
public function up()
{
DB::statement('SET FOREIGN_KEY_CHECKS = 0');
Schema::table('items', function(Blueprint $table)
{
$table->integer('type_id')->unsigned()->index()->after('name');
});
DB::update('update items set type_id = 1');
Schema::table('items', function(Blueprint $table)
{
$table->foreign('type_id')->references('id')->on('types');
// Here I do other stuff to this table
});
DB::statement('SET FOREIGN_KEY_CHECKS = 1');
}
解决方法:
您可以使用DB :: statement和SQL禁用迁移中的外键检查.
DB::statement('SET FOREIGN_KEY_CHECKS = 0');
// add column
DB::statement('SET FOREIGN_KEY_CHECKS = 1');
内容总结
以上是互联网集市为您收集整理的mysql-Laravel迁移外键取决于种子数据全部内容,希望文章能够帮你解决mysql-Laravel迁移外键取决于种子数据所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。