laravel報錯的問題 42S01 420004 42S22]等...

haiogo發表於2021-02-02

laravel避坑筆記

來源網路

原因:從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 資料遷移
    }

再重新使用遷移命令:

php artisan migrate

遷移資料時表已存在,

解決辦法:

刪除已存在的表,然後重新遷移。

  • 修改方法一: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 時是不會報錯的;
而在執行遷移時問題就來了:

laravel-migration-low-fault

解決辦法就是刪除或修改同一 table 的 schema 名稱。
這裡寫圖片描述

5.php artisan db:seed 表名變複數 單數

這可能和 Chinglish 有關,老外習慣把表名寫為複數,所以乾脆預設Model 對應的表名是這個英文單詞的複數形式
因此,要在 model 裡重寫 $table 屬性,如:

protected $table=’student’;

查詢於網路,儲存方便自己方便他人

本作品採用《CC 協議》,轉載必須註明作者和本文連結

相關文章