來源網路
1.Laravel 5.4: Specified key was too long error原因:從LV 5.4起資料庫預設字元集為utf8mb4(包括了對emojis 的支援)。如果使用的是 MySQL v5.7.7 或更高版本不需要做什麼修改。 使用更早版本的MySQL資料庫(包括MariaDB)的童鞋可以這樣修改了,修改檔案/project/app/Providers/AppServiceProvider.php
use Illuminate\Support\Facades\Schema; // 注意要引入命名空间 public function boot() { Schema::defaultStringLength(191); // 针对 早期 mysql 数据迁移 }再重新使用遷移指令:
2.SQLSTATE[42S01]: Base table or view already exists: 1050php artisan migrate
#遷移資料時表已存在,解決方法:
刪除已存在的表,然後重新遷移。3.PDOException::(“SQLSTATE[42000]: Syntax error or access violation: 1067 Invalid default value for 'published_at'”)
##修改方法一:vim config/database.php
設定可為空的時間戳記:'mysql' => [ 'driver' => 'mysql',.... ... 'prefix' => '', 'strict' => true, // 修改这里 'engine' => null, ],修改為:
'mysql' => [ 'driver' => 'mysql',.... ... 'prefix' => '', 'strict' => false, // 修改这里 'engine' => null, ],
$table->nullableTimestamps()設定預設時間戳
$table->timestamps('created_at');// 会生成created_at\updated_at字段
此問題是由於table 遷移時沒有設定預設時間戳字段,但使用的是factory 方法產生seed 數據,可以修改
public function up() { Schema::create('posts', function (Blueprint $table) { $table->increments('id'); $table->string('slug')->unique(); $table->string('title'); $table->text('content'); $table->timestamps(); // 添加这行 }); }############重複make:migration############確切地說,這個也不算是坑,因為這個操作本身就是只需執行一次#########但對於新手來說,可能無意間就重複執行多次,而make:migration 時是不會報錯的;###而在執行遷移時問題就來了:##################解決方法就是刪除或修改相同table 的schema 名稱。 ########################5.php artisan db:seed 表格名稱變數複數單數#########這可能和Chinglish 有關,老外習慣把表名寫為複數,所以乾脆預設Model 對應的表名是這個英文單字的複數形式###因此,要在model 裡重寫$table 屬性,如:#######protected $ table='student';#########尋找於網絡,儲存方便自己方便他人#######
以上是【laravel避坑筆記】laravel報錯的問題42S01 420004 42S22]等...的詳細內容。更多資訊請關注PHP中文網其他相關文章!