PDOException::("SQLSTATE[42000]:Syntax error or access violation: 1075 Incorrect table definition;
Laravel5.7、MySQLを使用してコメント機能的なものを作ろうと思いたつ。
1:データベースを作る
→XAMPPのMySQL「Admin」で直接データベースを作っちゃう。
このときの設定は 「utf8mb4_unicode_ci」にする
2:データベースの中のテーブルを作る
→migrationファイルを作り各カラムを記述していく
名付けのセンスやお作法は置いといて、とりあえずこんな感じに。
3:Shellでこのプロジェクトのフォルダ階層まで入って、いざ php artisan migrate!
→めっちゃエラー出る。
エラーを読むに
PDOException::("SQLSTATE[42000]:Syntax error or access violation: 1075 Incorrect table definition;
there can be only one auto column and it must be defined as a key")
えーと…
PDOException::( "SQLSTATE [42000]:構文エラーまたはアクセス違反:1075不正なテーブル定義。
オートコラムが1つしかなく、キーとして定義する必要があります)
という翻訳をヒントによくよくもとの記述を見てみると
$table->increments('hoge');
的な文を2つ書いていたのでした。(上の画像では直っています)
このincrements構文は、テーブルに新しくデータが保存する度に1増加して設定されるモノ、という感じのようです。
それこそ投稿Noなりなんなり、準にデータを追加していって、データ何番、みたいな管理をする時にいちいち最後のNo+1として保存して…みたいなことをしなくていいようにするためのものなんですね。便利
で、increments構文をSQLで指定する場合、
それは主キーでなければならない。
それは重複して設定されていてはいけない(主キーだからか)
というところに違反していたのでエラーが出ていたようです。
その他にも1箇所 ; を記述するのを忘れていたり、知ってる知らない以前のチェックも大事ですね。
ということでincrementsで書いていた2個目をおとなしくintegerで指定し直したら
無事にmigrateできてテーブルも出来上がっていました。
同じようなエラーでなんでやってなる人の手助けとなればイイナー