概要
Laravelのマイグレーションファイルにて、自動で$table->id();
のようなカラムを外部キー制約として行う事ができたのですが、例えば電話番号のようなもので外部キー制約を行いたいのですがうまくいきません。
実現したいこと
実現したい内容はid
を外部キー制約元とするのではなく、tel_num
を外部キー制約元にしてtel_id
と紐付けを行いたいです。
users_table - id # 自動ID - name # ユーザ名 unsignedBigIntegerを使用 - tel_num # 電話番号(*1) profiles_tabel - id # 自動ID - tel_id # 電話番号(*1と外部キー制約) unsignedBigIntegerを使用
users_tabel
<?php use Illuminate\Database\Migrations\Migration; use Illuminate\Database\Schema\Blueprint; use Illuminate\Support\Facades\Schema; class CreateUsersTable extends Migration { /** * Run the migrations. * * @return void */ public function up() { Schema::create('users', function (Blueprint $table) { $table->id(); $table->string('name'); $table->unsignedBigInteger('tel_num')->nullable()->default(null); $table->string('email')->unique(); $table->timestamp('email_verified_at')->nullable(); $table->string('password'); $table->rememberToken(); $table->timestamps(); }); } /** * Reverse the migrations. * * @return void */ public function down() { Schema::dropIfExists('users'); } }
profiles_tabel
<?php use Illuminate\Database\Migrations\Migration; use Illuminate\Database\Schema\Blueprint; use Illuminate\Support\Facades\Schema; class CreateProfilesTable extends Migration { /** * Run the migrations. * * @return void */ public function up() { Schema::create('profiles', function (Blueprint $table) { $table->id(); $table->unsignedBigInteger('tel_id')->unique(); $table->foreign('tel_id')->references('tel_num')->on('users'); $table->timestamps(); }); } /** * Reverse the migrations. * * @return void */ public function down() { Schema::dropIfExists('profiles'); } }
調べたとこと型が違った場合エラーになっている事が原因としてあげられると書いてあったのですが型を調べたところ両方とも上記コードで指定しているようにunsignedBigInteger
を指定しており、できていると思っております。
エラー内容
SQLSTATE[HY000]: General error: 1215 Cannot add foreign key constraint (SQL: alter table `profiles` add constraint `profiles_primary_id_foreign` foreign key (`tel_id`) references `users` (`tel_num`))
環境
Laravel 6.xを使用しています。
回答1件
あなたの回答
tips
プレビュー