質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.35%
MySQL

MySQL(マイエスキューエル)は、TCX DataKonsultAB社などが開発するRDBMS(リレーショナルデータベースの管理システム)です。世界で最も人気の高いシステムで、オープンソースで開発されています。MySQLデータベースサーバは、高速性と信頼性があり、Linux、UNIX、Windowsなどの複数のプラットフォームで動作することができます。

Laravel

LaravelとはTaylor Otwellによって開発された、オープンソースなPHPフレームワークです。Laravelはシンプルで表現的なシンタックスを持ち合わせており、ウェブアプリケーション開発の手助けをしてくれます。

PHP

PHPは、Webサイト構築に特化して開発されたプログラミング言語です。大きな特徴のひとつは、HTMLに直接プログラムを埋め込むことができるという点です。PHPを用いることで、HTMLを動的コンテンツとして出力できます。HTMLがそのままブラウザに表示されるのに対し、PHPプログラムはサーバ側で実行された結果がブラウザに表示されるため、PHPスクリプトは「サーバサイドスクリプト」と呼ばれています。

Q&A

解決済

2回答

5052閲覧

Laravel migrateで外部キー制約のエラーが直せません

nakaji-junk

総合スコア3

MySQL

MySQL(マイエスキューエル)は、TCX DataKonsultAB社などが開発するRDBMS(リレーショナルデータベースの管理システム)です。世界で最も人気の高いシステムで、オープンソースで開発されています。MySQLデータベースサーバは、高速性と信頼性があり、Linux、UNIX、Windowsなどの複数のプラットフォームで動作することができます。

Laravel

LaravelとはTaylor Otwellによって開発された、オープンソースなPHPフレームワークです。Laravelはシンプルで表現的なシンタックスを持ち合わせており、ウェブアプリケーション開発の手助けをしてくれます。

PHP

PHPは、Webサイト構築に特化して開発されたプログラミング言語です。大きな特徴のひとつは、HTMLに直接プログラムを埋め込むことができるという点です。PHPを用いることで、HTMLを動的コンテンツとして出力できます。HTMLがそのままブラウザに表示されるのに対し、PHPプログラムはサーバ側で実行された結果がブラウザに表示されるため、PHPスクリプトは「サーバサイドスクリプト」と呼ばれています。

0グッド

0クリップ

投稿2020/09/30 05:50

編集2020/10/01 05:19

Laravelでphp artisan migrateをかけると下記のエラーになってしまいます。
調べたところキーの型が違うようなので色々と試してみたのですが解決できません。
ご教授頂けますと幸いです。
(laravel初心者です)
migrateはfreshしてやり直したりキャッシュを消したりもしています。

[エラー内容]

SQLSTATE[HY000]: General error: 1215 Cannot add foreign key constraint (SQL: create table photos (id varchar(255) not null, user_id int unsigned not null, filename varchar(255) not null, created_at timestamp null, updated_at timestamp null) default character set utf8mb4 collate 'utf8mb4_unicode_ci')

[環境]
mac
PHP 7.4.10
Laravel Framework 6.18.40

[ソースコード]

users_tableはlaravelの標準を使っています。

users

1public function up() 2 { 3 Schema::create('users', function (Blueprint $table) { 4 $table->bigIncrements('id'); 5 $table->string('name'); 6 $table->string('email')->unique(); 7 $table->timestamp('email_verified_at')->nullable(); 8 $table->string('password'); 9 $table->rememberToken(); 10 $table->timestamps(); 11 }); 12 }

今回エラーが起きるphotos_tableがこちらです。

photos

1Schema::create('photos', function (Blueprint $table) { 2 $table->string('id')->primary(); 3 $table->unsignedInteger('user_id'); 4 $table->string('filename'); 5 $table->timestamps(); 6 7 $table->foreign('user_id')->references('id')->on('users'); 8 9 });

[試したこと]
①photos_tableを下記に変更
$table->bigIncrements('user_id');
(usersと合わせる)
または
$table->integer('user_id')->unsigned();

②users_tableを下記に変更
$table->bigInteger('id');
(photosに合わせる)
または
$table->string('id')->unique();に変更

③頭にbigがある状態と無い状態とで試したみた

④調べる内に$table->engine = 'InnoDB';が必要との記事も見つけたのでやってみた

どれも同じエラーになり解決できません。

2020.10.1追加
phepr.kさんの回答より変更してやったこと

$table->unsignedInteger('user_id');を
$table->unsignedBigInteger('user_id');に変更。

php artisan migrate:refresh
php artisan migrate:fresh
を行う。

↓エラー内容のスクショ
コマンドプロンプト画面

↓usersのマイグレーションファイル
users_table

↓photosのマイグレーションファイル
photos_table

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

nakaji-junk

2020/09/30 14:50

アドバイスありがとうございます。 拝見しましたがまだよく分からないのでもっと勉強します。
guest

回答2

0

ベストアンサー

diff

1Schema::create('photos', function (Blueprint $table) { 2 $table->string('id')->primary(); 3- $table->unsignedInteger('user_id'); 4+ $table->unsignedBigInteger('user_id'); 5 $table->string('filename'); 6 $table->timestamps(); 7 8 $table->foreign('user_id')->references('id')->on('users'); 9 });

diff

1Schema::create('photos', function (Blueprint $table) { 2- $table->string('id')->primary(); 3+ $table->bigIncrements('id'); 4 $table->unsignedInteger('user_id'); 5 $table->string('filename'); 6 $table->timestamps(); 7 8 $table->foreign('user_id')->references('id')->on('users'); 9 10});

問題の原因は、primary にできない string 型を指定していたため、外部キーを付与しようとする以前に、photos テーブルの作成で失敗していたため。

投稿2020/09/30 06:28

編集2020/10/01 06:03
phper.k

総合スコア3923

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

nakaji-junk

2020/09/30 14:48

ご回答ありがとうございます。 こちらの記述もすでに試しているのですがやはりエラーになります。
phper.k

2020/10/01 00:22 編集

どんなエラーになったのかを書かなければお手伝いできません。 エラーの内容はそのまま伝えることが質問の基本。
nakaji-junk

2020/10/01 04:11

失礼しました。 SQLSTATE[HY000]: General error: 1215 Cannot add foreign key constraint (SQL: create table `photos` (`id` varchar(255) not null, `user_id` bigint unsigned not null, `filename` varchar(255) not null, `created_at` timestamp null, `updated_at` timestamp null) default character set utf8mb4 collate 'utf8mb4_unicode_ci') 1 PDOException::("SQLSTATE[HY000]: General error: 1215 Cannot add foreign key constraint") 2 PDOStatement::execute() こちらのエラーです。 よろしくお願いします。
phper.k

2020/10/01 04:17

何をしたときのエラーですか? 実行したコマンドを書いてください。
nakaji-junk

2020/10/01 04:44

php artisan migrate:refresh をした時です。
phper.k

2020/10/01 04:48 編集

php artisan migrate:fresh したらどうなりますか? それで失敗した場合は、コンソールの画面をスクリーンショットを撮って提示してください。
nakaji-junk

2020/10/01 05:09

こちらのコマンドも同じエラーになります。 本題の方へコンソール画面のスクリーンショットを添付しました。 よろしくお願いします。
phper.k

2020/10/01 05:11 編集

このコマンドを実行した時点での、 users, photos のマイグレーションファイルを「そのまま」提示してください。
phper.k

2020/10/01 05:40

回答に追記
nakaji-junk

2020/10/01 06:00

ありがとうございます。 photos_tableを下記に変更してphp artisan migrate:fresh をやってみましたが同じエラーが起きてしまいます。 - $table->string('id')->primary(); + $table->bigIncrements('id'); SQLSTATE[HY000]: General error: 1215 Cannot add foreign key constraint (SQL: create table `photos` (`id` bigint unsigned not null auto_increment primary key, `user_id` bigint unsigned not null, `filename` varchar(255) not null, `created_at` timestamp null, `updated_at` timestamp null) default character set utf8mb4 collate 'utf8mb4_unicode_ci' engine = InnoDB) 1 PDOException::("SQLSTATE[HY000]: General error: 1215 Cannot add foreign key constraint") 2 PDOStatement::execute() もっと違うところに問題があるのでしょうか。
phper.k

2020/10/01 06:02

マサカ+ とか書いてないよね???
nakaji-junk

2020/10/01 06:06

はい、大丈夫です。書いていません。
phper.k

2020/10/01 06:14 編集

だとしたら、提示されていないなんかの問題が別にあるか、指示通りのことをやっていないかのどちらかです。 現にこちらの手元では正常に実行できている
nakaji-junk

2020/10/01 06:14

もう一度調べながらやってみます。 お時間頂戴しましてありがとうございました。
nakaji-junk

2020/12/02 20:16

期間が空いてしまいましたが、学習を進めたのちに再実装したところ、 Schema::create('photos', function (Blueprint $table) { $table->string('id')->primary(); - $table->unsignedInteger('user_id'); + $table->unsignedBigInteger('user_id'); $table->string('filename'); $table->timestamps(); $table->foreign('user_id')->references('id')->on('users'); }); この記述でmigrateが無事通りました。 その節はありがとうございました。
guest

0

PhotosはUsersのあとにマイグレーションされていますか?

投稿2020/09/30 05:55

botamochi

総合スコア19

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

nakaji-junk

2020/09/30 05:59

はい、users→photosの順番で作っています。 usersは問題なく作られます。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.35%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問