手机版

laravel迁移初学常见错误的解决方法

时间:2021-09-03 来源:互联网 编辑:宝哥软件园 浏览:

前言

最近断断续续开始laravel入门学习,想整个简单的通讯录系统,设立了两个表,一个树枝,一个联系人。在创建移动文件的时候,没有考虑仔细,先把联系人表建立了,联系人表有个外键连接到分支的id,结果执行移动命令的时候,出现以下错误:

[照亮\数据库\查询例外] SQLSTATE[HY000]:一般错误: 1215无法添加外键约束(SQL:更改表"联系人"添加约束"联系ts_branch_id_foreign "外键(` branch_id `)引用删除级联上的`分支`(` id `))[PDOException]SQLSTATE[HY000]3:一般错误3360 1215无法添加外键约束初步怀疑是表创建先后不规范造成,于是,手动修改分支的移动文件名称上的日期,再执行

php artisan migrate:reset出现如下错误:

[错误异常]包括(/Users/Ade/www/laravel _ phone book 5.2):未能打开流:正在进行的操作未能打开流错误解决

光看错误提示不是很理解,我们查看laravel的原木文件

更多存储/日志/laravel.log找到出现错误的那段话:

[2016-09-29 18:05:35]本地。错误:异常错误异常带有消息包括(/Users/Ade/www/laravel _ phone book 5.2):未能打开stream:操作正在进行in/Users/Ade/www/laravel _ phone book 5.2/厂商/作曲者/类加载器。PHP 3360412堆栈跟踪: # 0/Users/Ade/www/laravel _ phone book 5.2/厂商/作曲者/类加载器。PHP(412),'/Users/Ade/www/.412,Array)# 1/Users/Ade/www/laravel _ phone book 5.2/厂商/Composer/类加载器。PHP(412): Composer \ Autoload \ include file()# 2/Users/Ade/www/laravel _ phone book 5.2/厂商/Composer/类加载器。PHP(301): Composer \ Autoload \ include文件('/Users/Ade/www/.)# 3[内部函数]: Composer \ Autoload \ class loader-加载类(' CreateBranchesT . ')# 4/Users/Ade/www/laravel _ phone book 5.2/厂商/laravel/框架/src/light/Database/Migrations/Migrator。PHP(335): spl _ autoload _ call(' CreateBranchesT . ')# 5/Users/Ade/www/laravel _ phone book 5.2/厂商/laravel/框架/src/light/Database/Migrations/Migrator。PHP(227): light \数据库\迁移\迁移器-解析(' 2016 _ 09 _ 12 _ 1728.))# 6/Users/Ade/www/laravel _ phone book 5.2/厂商/laravel/框架/src/light/Database/Migrations/Migrator。PHP(206):轻型\数据库\迁移\迁移器-药物(对象(标准类),假)错误出现在ClassLoader.php文件的412 行

查看改行代码,发现是一个调用文件的语句:

而这个文件,在原木文件中已经指出,即解决(' 2016_09_12_1728 . ') 。原木提示的这个名称,就是我修改的树枝的移动文件名称。

我们再搜搜正常的移动文件会在哪些地方出现:

MD find 2014 _ 10 _ 12 _ 000000 _ create _ users _ table。PHP | grep电话簿

可见,正常的有3个地方出现,修改过的只有一个地方出现。

编辑这两个未出现的文件

调整autoload_static.php文件

发现供应商/作曲家/autoload_static.php文件中,和分支相关的语句如下:

CreateBranchesTable '=_ _ DIR _ _ .想来应该是改名的时候,PHP风暴自动帮我把这个文件里面有关分支文件路径全部给删掉了。加回去就好了。参照正常的移动文件名的配置情况,补充为

CreateBranchesTable'=__DIR__ ./././数据库/迁移/2016 _ 09 _ 12 _ 172822 _ create _ branch _ table。PHP ',调整autoload_classmap.php文件

我们发现autoload_classmap.php文件中,有关分支的路径名还是修改前的路径:

CreateBranchesTable'=$baseDir ./数据库/迁移/2016 _ 09 _ 29 _ 172822 _ create _ branch _ table。PHP ',将其修改为

创建分支表'=$ basedir '/database/migrationss/2016 _ 09 _ 12 _ 172822 _ create _ branch _ table . PHP ',然后执行migration命令

PHP artisan migrate : reset

好了,刚才的错误没有了,但是我们发现联系人表没有回滚。

联系人回滚失败分析

通过sequel pro连接到数据库

发现联系人表确实存在,但迁移表中没有内容,所以执行上一个migrate命令时肯定有错误,联系人的执行记录没有写入migration表。我们可以尝试再次执行迁移命令。首先,手动删除这两个表,即清空数据库,然后执行:

Php artisan migrate让我们忽略创建联系人表中的错误,并刷新sequel pro来检查:

果然迁移表中没有创建联系人的记录,难怪执行重置时不会有联系人的回滚操作。

联系人无法为branch_id外键创建解析

现在我们已经执行了migrate命令,让我们再来看看这个最早的错误:

[照亮\数据库\查询例外] SQLSTATE[HY000]:一般错误: 1215无法添加外键约束(SQL:更改表“联系人”添加约束“联系人_分支_id_foreign”外键(`分支_id `)在更新级联时引用了` br anchs `(` id `))[PDOException]SQLSTATE[HY000]3:一般错误3360 1215无法添加外键约束]由于提示是一个SQL错误,我们不妨在sequel pro中手动执行这个SQL语句。

果然,执行返回了一个错误。

仔细看这份声明没有错。仔细想想,应该是branch_id的类型声明和branch表中id的类型不一致造成的。检查联系人的结构,发现未签名未被选中。检查后,执行添加外键的SQL语句,成功。

找到问题原因后,我们清空数据库,修改联系人的迁移文件,并将branch_id调整为:

$ table-整数(' branch _ ID ')-无符号()-注释('机构ID ');再次执行迁移命令,成功!

摘要

以上就是本文的全部内容。希望本文的内容对大家的学习或工作有一定的参考价值。有问题可以留言交流。谢谢你的支持。

版权声明:laravel迁移初学常见错误的解决方法是由宝哥软件园云端程序自动收集整理而来。如果本文侵犯了你的权益,请联系本站底部QQ或者邮箱删除。