次のコラムでは、laravelのエラー報告の問題42S01 420004 42S22]などを紹介します...必要な友人の役に立てば幸いです。
laravel の落とし穴回避メモソース ネットワーク
1.Laravel 5.4:指定されたキーが長すぎますエラー原因: LV 5.4 以降、データベースのデフォルトの文字セットは utf8mb4 (絵文字のサポートを含む) です。 MySQL v5.7.7 以降を使用している場合は、変更する必要はありません。 MySQL データベースの以前のバージョン (MariaDB を含む) を使用する子供用の靴は、次のように変更できます。ファイル /project/app/Providers/AppServiceProvider.php
2.SQLSTATE[42S01]: ベース テーブルまたはビューはすでに存在します: 1050use Illuminate\Support\Facades\Schema; // 注意要引入命名空间 public function boot() { Schema::defaultStringLength(191); // 针对 早期 mysql 数据迁移 }ログイン後にコピーを変更して再利用します。移行コマンド:
php artisan migrateログイン後にコピー
テーブルは移行時にすでに存在します。データ、解決策:
既存のテーブルを削除して、再度移行します。#3.PDOException::("SQLSTATE[42000]: 構文エラーまたはアクセス違反: 1067 'published_at' のデフォルト値が無効です")
変更方法 1: 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字段
##4.PDOException::(“SQLSTATE[42S22]: 列が見つかりません: 1054 Unknown columns 'created_at' in 'field list'")
この問題は、テーブルの移行中にデフォルトのタイムスタンプ フィールドが設定されないことが原因ですが、ファクトリ メソッドはシード データの生成に使用されます。修正できます。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
正確には、これは次のとおりです。この操作は 1 回だけ実行する必要があるため、落とし穴ではありません。ただし、初心者の場合、意図せずに複数回繰り返す可能性があり、移行時にエラーは報告されません。移行の実行時に問題が発生しました。
解決策は、同じテーブルのスキーマ名を削除または変更することです。
の複数形としてモデルに対応するテーブル名をデフォルトで使用します。したがって、$table 属性はモデル内で次のように書き換える必要があります。 :##5.php 職人 db:seed テーブル名が複数形および単数形になる
これは次のことに関連している可能性があります。チングリッシュの場合、外国人はテーブル名を複数形で書くことに慣れているため、英語の単語
protected $ table='student';インターネットで検索し、自分や他の人のために保存してください。
以上が【Laravel ピット回避メモ】Laravel エラー報告問題 42S01 420004 42S22】etc...の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。