例えば、usersテーブルがあり、そのテーブルを参照するpostsテーブルがあるとします。
Laravelでは、usersテーブルとpostsを紐づける外部キーはuser_id
と命名するのが一般的でしょう。
usersテーブルのid
(主キー)とpostsのuser_id
を紐づけを行いたい場合のマイグレーション。
sample.php
Schema::table('users', function (Blueprint $table) {
$table->id();
$table->string('name');
});
Schema::table('posts', function (Blueprint $table) {
$table->id();
$table->foreignId('user_id')
->constrained()
->onUpdate('cascade')
->onDelete('cascade');
});
しかし、例えばusersテーブルに会員番号(user_number
)というカラムがあったとして
user_number
で外部キー結合を行いたい場合のマイグレーションは以下のようになります。
sample.php
Schema::table('users', function (Blueprint $table) {
$table->id();
$table->string('name');
$table->unsignedInteger('user_number')->unique();
});
Schema::table('posts', function (Blueprint $table) {
$table->id();
$table->unsignedInteger('user_number');
$table->foreign('user_number')
->references('user_number')
->on('users')
->onUpdate('cascade')
->onDelete('cascade');
});
注意点
user_number
の型はusersとpostsで両方とも同じ型にして下さい。
また、予期しないバグを防ぐためusersのuser_number
はユニークにすることをおすすめします。
usersとpostsを結合する場合
sample.php
$posts = Post::join('users', 'posts.user_number', '=', 'users.user_number')
->get();