【Laravel】php artisan migrateでハマったので、XAMPP環境でPostgreSQLを使ってみた。


migrateでエラーが出まくった。。。

いつもお世話になっているTechpitの教材で学習していた際に、migrateで思いっきりハマり、解決できなかったのでXAMPPでPostgreSQLを使えるようにしてみました。その際のメモです。

学習に使用している教材のリンク:
https://www.techpit.jp/p/laravel-vue-sns

こちら作りながら学べる学習教材で楽しみながらミドルウェア、認可、フロントエンドとの連携などかなり深いところまで学べるのでめちゃくちゃおススメです!!

自身の学習環境に関して


教材ではMac、Docker、PostgreSQLを用いて学習します。

僕の場合はWindowsユーザーでDocker(Docker for Windows)の環境構築を以前挫折した経緯があったので、Windows、XAMPP、MariaDB(MySQL)で学習していました。

つまり、教材をじぶんの環境に合わせて読み替える必要がありました。(僕にこれができるスキルはまだなかったってことです。。。泣)

データベースの構成


この教材のデータベースの構成は以下になります。(無料で見れる範囲の内容ですので引用させていただいております。)

https://www.techpit.jp/courses/777553/lectures/14528046


順番としては、articlesテーブルを作った後に、likesテーブルを作るのですが、likesテーブルを作ろうとしたところエラーが出るようになってしまいました。(超絶序盤。)

どうハマったのか


※これに関しては解決できなかったので、原因分かり次第追記します。※

どうやら外部キー制約関連で違いがある(負の値の無い数値型にするのがポイント)とのことです。

嘆いていたところやんばるさん(著者)からご教授いただきました。ありがとうございます。泣

参考(教えていただきました。):
https://qiita.com/0w0/items/4a9cb7d27794bfb93d46#%E5%8E%9F%E5%9B%A0

さっそくご教示いただいた通り、unsigned()を付けて、php artisan migrateを実行!!

ところが。。。

SQLSTATE[HY000]: General error: 1005 Can't create table laravel_vue_sns.articles (errno: 150 "Foreign key constraint is
key (user_id) references users (id))

laravel_vue_sns.articlesを作成できません(errno:150"外部キー制約はキー( user_id)はusersid)を参照します)
SQLSTATE[HY000]: General error: 1005 Can't create table laravel_vue_sns.articles (errno: 150 "Foreign key constraint is incorrectly formed") (SQL: alter tarticles(errno: 150 "Foreign key constraint is incorrectly formed") (SQL: alter tablearticlesadd constraintarticles_user_id_foreignforeign key (user_id) referencesusers(id`))

laravel_vue_sns.articlesを作成できません(errno:150"外部キー制約の形式が正しくありません ")(SQL:alter tarticles(errno:150"外部キー制約が正しくありません (SQL:変更テーブルarticles制約の追加 articles_user_id_foreign外部キー(user_id)参照 usersid`))

こうなる。

続いて教えていただいたQiitaの記事を参考に自分のスクリプト見ながら睨めっこ。

increments()で作ったカラムには、実は裏でunsined(符号無し)属性が付与される。要は採番項目なので正の値しか登録できないわけだが、役割テーブル側のuser_idauthority_idには同様の制約を付けていない。

https://qiita.com/0w0/items/4a9cb7d27794bfb93d46#%E5%8E%9F%E5%9B%A0


自分のマイグレーションファイルでは、bigIncrementsで記載していることに気付く。

違いを調べてみました。

参考:
https://qiita.com/fuubit/items/17f3eb306c64ede163d2


どうやらbigIncrements()は負の値も登録できてしまうっぽい。

ってことで、全てincrements()に変えてみました。

が、先ほどと同様にエラーが出てしまいました。。。

解決できず。。。泣

環境の違いだけでここまで躓くものかと痛感。。。(何回目だ。。。)

XAMPPでPostgreSQLを使ってみた。


ってことで、キッパリ諦めてXAMPPでPostgreSQLを使う形に挑戦してみました。(Dockerにも再挑戦しましたがcompose upができず再挫折。。。)

参考:
https://tasulife-23.com/xampp-postgresql/

この記事では、PHPファイルからPostgreSQLまでのつなぎ方が記載されています。

ざっくりこんな内容です。

その後、Laravelに紐づけるためには.envファイルを編集する必要があります。

DB_CONNECTION=pgsql
DB_HOST=localhost
DB_PORT=5432
DB_DATABASE=test
DB_USERNAME=postgres
DB_PASSWORD=secret(ここはご自身で設定したパスワードを記載してください。)

僕の場合はこんな感じです。

別途、データベースを用意する必要があるのでデータベースを作成。

psql -U postgres -c "create database test;

その後、マイグレーション。

無事、マイグレーションすることができました。