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 時是不會報錯的;
而在執行遷移時問題就來了:
解決辦法就是刪除或修改同一 table 的 schema 名稱。
5.php artisan db:seed 表名變複數 單數
這可能和 Chinglish 有關,老外習慣把表名寫為複數,所以乾脆預設Model 對應的表名是這個英文單詞的複數形式
因此,要在 model 裡重寫 $table 屬性,如:
protected $table=’student’;
查詢於網路,儲存方便自己方便他人
本作品採用《CC 協議》,轉載必須註明作者和本文連結