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

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

<img class="alignnone size-full wp-image-475" src="https://chobimusic.com/wp-content/uploads/2020/03/コメント-2020-03-19-110738.jpg" alt="" width="967" height="215" />

学習に使用している教材のリンク：
<a href="https://www.techpit.jp/p/laravel-vue-sns">https://www.techpit.jp/p/laravel-vue-sns</a>

<span style="color: #ff0000;"><strong>こちら作りながら学べる学習教材で楽しみながらミドルウェア、認可、フロントエンドとの連携などかなり深いところまで学べるのでめちゃくちゃおススメです！！</strong></span>
<h2>自身の学習環境に関して</h2>
教材では<span style="color: #ff0000;"><strong>Mac、Docker、PostgreSQL</strong></span>を用いて学習します。

僕の場合はWindowsユーザーでDocker(Docker for Windows)の環境構築を以前挫折した経緯があったので、<span style="color: #ff0000;"><strong>Windows、XAMPP、MariaDB(MySQL)</strong></span>で学習していました。

つまり、教材をじぶんの環境に合わせて読み替える必要がありました。<del>(僕にこれができるスキルはまだなかったってことです。。。泣)</del>
<h2>データベースの構成</h2>
この教材のデータベースの構成は以下になります。(無料で見れる範囲の内容ですので引用させていただいております。)
<blockquote><img class="alignnone wp-image-474" src="https://chobimusic.com/wp-content/uploads/2020/03/72740822-cd89cb80-3be9-11ea-9020-82d9ffb21048-1024x1000.png" alt="" width="424" height="414" />

<a href="https://www.techpit.jp/courses/777553/lectures/14528046">https://www.techpit.jp/courses/777553/lectures/14528046</a></blockquote>
順番としては、articlesテーブルを作った後に、likesテーブルを作るのですが、likesテーブルを作ろうとしたところエラーが出るようになってしまいました。(超絶序盤。)
<h2>どうハマったのか</h2>
※これに関しては解決できなかったので、原因分かり次第追記します。※

どうやら<span style="color: #ff0000;"><strong>外部キー制約関連で違いがある(負の値の無い数値型にするのがポイント)</strong></span>とのことです。

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

<img class="alignnone size-full wp-image-476" src="https://chobimusic.com/wp-content/uploads/2020/03/a-3.jpg" alt="" width="575" height="416" />

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

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

ところが。。。
<pre>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`))</pre>
⇒`laravel_vue_sns`.`articles`を作成できません（errno：150"外部キー制約はキー（ `user_id`）は` users`（ `id`）を参照します）
<pre>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 table `articles` add constraint `articles_user_id_foreign` foreign key (`user_id`) references `users` (`id`))</pre>

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

こうなる。

続いて教えていただいたQiitaの記事を参考に自分のスクリプト見ながら睨めっこ。
<blockquote><code>increments()</code>で作ったカラムには、実は裏で<code>unsined（符号無し）属性</code>が付与される。要は採番項目なので正の値しか登録できないわけだが、役割テーブル側の<code>user_id</code>と<code>authority_id</code>には同様の制約を付けていない。

<a href="https://qiita.com/0w0/items/4a9cb7d27794bfb93d46#%E5%8E%9F%E5%9B%A0">https://qiita.com/0w0/items/4a9cb7d27794bfb93d46#%E5%8E%9F%E5%9B%A0</a></blockquote>
自分のマイグレーションファイルでは、bigIncrementsで記載していることに気付く。

違いを調べてみました。
<p class="it-Header_title">参考：
<a href="https://qiita.com/fuubit/items/17f3eb306c64ede163d2">https://qiita.com/fuubit/items/17f3eb306c64ede163d2</a></p>
どうやらbigIncrements()は負の値も登録できてしまうっぽい。

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

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

<span style="color: #ff0000;"><strong>解決できず。。。泣</strong></span>

環境の違いだけでここまで躓くものかと痛感。。。<del>(何回目だ。。。)</del>
<h2>XAMPPでPostgreSQLを使ってみた。</h2>
ってことで、キッパリ諦めてXAMPPでPostgreSQLを使う形に挑戦してみました。(Dockerにも再挑戦しましたがcompose upができず再挫折。。。)

参考：
<a href="https://tasulife-23.com/xampp-postgresql/">https://tasulife-23.com/xampp-postgresql/</a>

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

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

<img class="alignnone wp-image-481" src="https://chobimusic.com/wp-content/uploads/2020/03/c-2.jpg" alt="" width="481" height="256" />

その後、Laravelに紐づけるためには.envファイルを編集する必要があります。
<pre>DB_CONNECTION=pgsql
DB_HOST=localhost
DB_PORT=5432
DB_DATABASE=test
DB_USERNAME=postgres
DB_PASSWORD=secret(ここはご自身で設定したパスワードを記載してください。)</pre>
僕の場合はこんな感じです。

別途、データベースを用意する必要があるのでデータベースを作成。
<pre>psql -U postgres -c "create database test;</pre>
その後、マイグレーション。

<img class="alignnone size-full wp-image-482" src="https://chobimusic.com/wp-content/uploads/2020/03/ss.jpg" alt="" width="587" height="222" />

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

&nbsp;