摘要:提示的這個名稱,就是我修改的的文件名稱。我們再搜搜正常的文件會在哪些地方出現可見,正常的有個地方出現,修改過的只有個地方出現。果然,執行返回錯誤。仔細查看語句并沒有錯誤,一想,應該是類型聲明和表中的類型不一致造成的吧。
斷斷續續開始 laravel 入門學習,想整個簡單的通訊錄系統,設立了兩個表,一個 branches ,一個 contacts。
在創建 migration 文件的時候,沒有考慮仔細,先把 contacts 表建立了,contacts 表有個外鍵連接到 branches 的 id,結果執行 migrate 命令的時候,出現以下錯誤:
[IlluminateDatabaseQueryException] SQLSTATE[HY000]: General error: 1215 Cannot add foreign key constraint (SQL: alter table `contacts` add constraint `contac ts_branch_id_foreign` foreign key (`branch_id`) references `branches` (`id`) on delete cascade) [PDOException] SQLSTATE[HY000]: General error: 1215 Cannot add foreign key constraint
初步懷疑是表創建先后不規范造成,于是,手動修改 branches 的 migration 文件名稱上的日期,再執行
php artisan migrate:reset
出現如下錯誤:
[ErrorException] include(/Users/Ade/www/laravel_phonebook5.2): failed to open stream: Operation now in progressfailed to open stream 錯誤解決
光看錯誤提示不是很理解,我們查看 laravel 的 log 文件
more storage/logs/laravel.log
找到出現 ERROR 的那段話:
[2016-09-29 18:05:35] local.ERROR: exception "ErrorException" with message "include(/Users/Ade/www/laravel_phonebook5.2): failed to open stream: Operation now in progress" in /Users/Ade/www/laravel_phonebook5.2/vendor/composer/ClassLoader.php:412 Stack trace: #0 /Users/Ade/www/laravel_phonebook5.2/vendor/composer/ClassLoader.php(412): IlluminateFoundationBootstrapHandleExceptions->handleError(2, "include(/Users/...", "/Users/Ade/www/...", 412, Array) #1 /Users/Ade/www/laravel_phonebook5.2/vendor/composer/ClassLoader.php(412): ComposerAutoloadincludeFile() #2 /Users/Ade/www/laravel_phonebook5.2/vendor/composer/ClassLoader.php(301): ComposerAutoloadincludeFile("/Users/Ade/www/...") #3 [internal function]: ComposerAutoloadClassLoader->loadClass("CreateBranchesT...") #4 /Users/Ade/www/laravel_phonebook5.2/vendor/laravel/framework/src/Illuminate/Database/Migrations/Migrator.php(335): spl_autoload_call("CreateBranchesT...") #5 /Users/Ade/www/laravel_phonebook5.2/vendor/laravel/framework/src/Illuminate/Database/Migrations/Migrator.php(227): IlluminateDatabaseMigrationsMigrator->resolve("2016_09_12_1728...") #6 /Users/Ade/www/laravel_phonebook5.2/vendor/laravel/framework/src/Illuminate/Database/Migrations/Migrator.php(206): IlluminateDatabaseMigrationsMigrator->runDown(Object(stdClass), false)
錯誤出現在 ClassLoader.php 文件的 412 行
查看改行代碼,發現是一個調用文件的語句:
而這個文件,在 log 文件中已經指出,即 resolve("2016_09_12_1728...") 。log 提示的這個名稱,就是我修改的 branch 的 migration 文件名稱。
我們再搜搜正常的 migration 文件會在哪些地方出現:
mdfind 2014_10_12_000000_create_users_table.php|grep phonebook
可見,正常的有 3 個地方出現,修改過的只有 1 個地方出現。
編輯這兩個未出現的文件
調整 autoload_static.php 文件發現 vendor/composer/autoload_static.php 文件中,和 branches 相關的語句如下:
"CreateBranchesTable" => __DIR__ .,
想來應該是改名的時候,PHP Storm自動幫我把這個文件里面有關 branches 文件路徑全部給刪掉了。加回去就好了。
參照正常的 migration 文件名的配置情況,補充為
"CreateBranchesTable" => __DIR__ . "/../.." . "/database/migrations/2016_09_12_172822_create_branches_table.php",調整 autoload_classmap.php 文件
我們發現 autoload_classmap.php 文件中,有關 branches 的路徑名還是修改前的路徑:
"CreateBranchesTable" => $baseDir . "/database/migrations/2016_09_29_172822_create_branches_table.php",
將其修改為
"CreateBranchesTable" => $baseDir . "/database/migrations/2016_09_12_172822_create_branches_table.php",
再執行 migrate 命令
php artisan migrate:reset
OK,剛才的錯誤沒了,不過我們又發現 contacts 表沒有回滾,
contacts 回滾失敗的分析通過 sequel pro 連上數據庫查看
發現 contacts 表果然存在,但是 migration 表中已沒有內容,想必再執行前面 migrate 命令的時候出現錯誤,contacts 的執行記錄并沒有寫入 migrations 表中。
我們可以重新執行 migrate 命令試試看。首先手動刪除這兩張表,也就是清空數據庫,然后執行:
php artisan migrate
我們先忽視創建 contacts 表出現的錯誤,刷新 sequel pro 查看一下:
果然,migration 表中沒有 contacts 的創建記錄,這也就難怪執行 reset 的時候,會沒有 contacts 的回滾操作了。
contacts 無法創建 branch_id 外鍵的解決現在,我們已經執行了 migrate 命令,我們重新來看看這個最早出現的錯誤:
[IlluminateDatabaseQueryException] SQLSTATE[HY000]: General error: 1215 Cannot add foreign key constraint (SQL: alter table `contacts` add constraint `contacts_branch_id_foreign` foreign key (`branch_id`) references `br anches` (`id`) on update cascade) [PDOException] SQLSTATE[HY000]: General error: 1215 Cannot add foreign key constraint
冷靜下來分析一下,既然提示的是 SQL 錯誤,我們不妨在 sequel pro 中手工執行一下這條 SQL 語句。
果然,執行返回錯誤。
仔細查看語句并沒有錯誤,一想,應該是 branch_id 類型聲明和 branches 表中的 ID 類型不一致造成的吧。
查看 contacts 的結構,發現 Unsigned 沒有打鉤,勾選后再執行增加外鍵的 SQL 語句,成功。
找到問題原因后,我們就清空數據庫,修改 contacts 的 migration 文件,調整 branch_id 為:
$table->integer("branch_id")->unsigned()->comment("機構ID");
再重新執行 migrate 命令,成功!
文章版權歸作者所有,未經允許請勿轉載,若此文章存在違規行為,您可以聯系管理員刪除。
轉載請注明本文地址:http://specialneedsforspecialkids.com/yun/30504.html
摘要:打開瀏覽器輸入,如無意外,將出現如下圖,表示框架安裝成功。四系統內部后臺管理系統這個是框架自帶的后臺登錄管理系統,只需要簡單的命令即可運行。出現上圖即為,創建模型成功。 在PHP個各種web開發框架中,laravel算是一款簡潔、優雅的開發框架,本人也剛剛接觸到laravel,通過學習大神們的一些文章,下面是我的一些心得體會,希望可以給初學者一些幫助,大家一起進步。言歸正傳: 本人環境...
摘要:抱歉,最近忙,本篇等有時間更新。引言本文基于框架做的一個生成和存儲,主要目的是學習使用框架。書籍基于的,學習時使用框架開發。開發環境備注一直想把這本書的個作為系列分享出來,供初學者學習玩玩。 抱歉,最近忙,本篇等有時間更新。 引言 本文基于Laravel框架做的一個URL生成和存儲demo,主要目的是學習使用Laravel框架。內容基于英文書籍《Packt.Laravel.Applic...
摘要:前邊已經學會在本地用進行開發了,現在就讓我們將本地開發的項目部署到阿里云服務器,來次實戰操作,阿里云部署環境阿里,,使用服務器,登錄。 前邊已經學會在本地用Homestead進行開發了,現在就讓我們將本地開發的項目部署到阿里云服務器,來次實戰操作,阿里云部署環境:阿里ECS,Ubuntu,使用Nginx服務器,SSH登錄。 一、服務器配置 如果你的服務器是剛申請的,則必須做一些基礎的配...
摘要:在文件的標簽中加上以下代碼新手上路注冊登陸上面只是引用了一些簡單的的,也沒什么難的,不用傷心。 Laravel身為最優雅的PHP框架,很多學習PHP的小伙伴造就對Laravel垂涎欲滴。今天就來實現你的愿望,讓我們一起從零開始,利用Laravel實現Web應用最常見的注冊和登錄功能!所有的課程源碼已放在Github上:laravel-start. Race Start ! 首先我們來...
閱讀 1325·2023-04-26 00:10
閱讀 2428·2021-09-22 15:38
閱讀 3745·2021-09-22 15:13
閱讀 3503·2019-08-30 13:11
閱讀 646·2019-08-30 11:01
閱讀 3028·2019-08-29 14:20
閱讀 3208·2019-08-29 13:27
閱讀 1726·2019-08-29 11:33