<?php
use Illuminate\Support\Facades\Schema;
use Illuminate\Database\Schema\Blueprint;
use Illuminate\Database\Migrations\Migration;
class CreateReserveManagement extends Migration
{
/**
* Run the migrations.
*
* @return void
*/
public function up()
{
Schema::create('reserve_managements', function (Blueprint $table) {
$table->increments('id');
$table->string('name');
$table->string('address');
$table->string('phone');
$table->integer('days');
$table->date('start_day');
$table->timestamps();
$table->engine = 'InnoDB';
$table->charset = 'utf8mb4';
$table->collation = 'utf8mb4_unicode_ci';
});
Schema::create('reserve_day_lists', function (Blueprint $table) {
$table->increments('id');
$table->date('day');
$table->timestamps();
$table->engine = 'InnoDB';
$table->charset = 'utf8mb4';
$table->collation = 'utf8mb4_unicode_ci';
});
Schema::create('reserve_day_lists_reserve_managements', function (Blueprint $table) {
$table->increments('id');
$table->integer('reserve_managements_id')
->foreign('reserve_managements_id')
->references('id')->on('reserve_managements')
->onDelete('cascade');
$table->integer('reserve_day_lists_id')
->foreign('reserve_day_lists_id')
->references('id')->on('reserve_day_lists')
->onDelete('cascade');
$table->timestamps();
$table->engine = 'InnoDB';
$table->charset = 'utf8mb4';
$table->collation = 'utf8mb4_unicode_ci';
});
}
/**
* Reverse the migrations.
*
* @return void
*/
public function down()
{
Schema::dropIfExists('reserve_day_lists_reserve_managements');
Schema::dropIfExists('reserve_day_lists');
Schema::dropIfExists('reserve_managements');
}
}
あとで微調整はする。
コメント無くてすまぬ。
これらは色々試行錯誤した結果なので、あとで直すかもしれない。
最新のコードはgitを参照していただきたい。
Schema::create()を使って、3つのテーブルを作成している。
1つめが予約管理、その次が予約日管理、最後に中間テーブル。
中間テーブルからは各管理テーブルを紐付けるように外部参照キーを設定している。
で、このテーブルを扱うために、モデルを作成する。
$ php artisan make:model reserve_management
これでモデルのベースが作成される。
整理のためにディレクトリは移動しているが、一個作ればそれをベースにして複製すればよい。
各管理テーブルからは以下のような関数を追加する。
public function hasDayListAndManagement()
{
return $this->belongsTo('App\Model\reserve_day_lists_reserve_managements', 'id', 'reserve_managements_id');
}
これで、管理テーブルから中間テーブルをリレーションすることができる。
逆に、中間テーブルから管理テーブルには、
public function hasManagement()
{
return $this->hasMany('App\Model\reserve_management', 'id', 'reserve_managements_id');
}
public function hasDayList()
{
return $this->hasMany('App\Model\reserve_day_list', 'id', 'reserve_day_lists_id');
}