我创建此架构以节省特定季节中特定板的价格
例如:旅馆X半食宿50€,全食宿50€...
Schema::create('boards', function (Blueprint $table) {
$table->engine = "InnoDB";
$table->increments('id');
$table->string('name', 45);
});
Schema::create('seasons', function (Blueprint $table) {
$table->engine = "InnoDB";
$table->increments('id');
$table->string('name', 45);
});
Schema::create('hotels', function (Blueprint $table) {
$table->engine = "InnoDB";
$table->increments('id');
$table->string('name', 45);
$table->string('city');
$table->unsignedInteger('agency_id');
$table->foreign('agency_id')->references('id')->on('agencies');
$table->timestamps();
});
Schema::create('hotel_schedules', function (Blueprint $table) {
$table->engine = "InnoDB";
$table->increments('id');
$table->unsignedInteger('hotel_id');
$table->unsignedInteger('board_id');
$table->unsignedInteger('season_id');
$table->decimal('price', 7, 2);
$table->foreign('hotel_id')->references('id')->on('hotels');
$table->foreign('board_id')->references('id')->on('boards');
$table->foreign('season_id')->references('id')->on('seasons');
$table->timestamps();
});
董事会,季节和酒店之间的正确关系是什么? 是否正确创建另一个模型调用HotelSchedule?
谢谢
答案 0 :(得分:0)
董事会和时间表具有多对多的关系,因此您通常应该具有数据透视表board_schedule和相应的模型BoardSchedule,从上面的解释看来,董事会可以有多个时间表,而时间表可以有很多董事会。 董事会季节是一对多的关系,一个董事会只能有一个季节,但一个季节可以属于多个董事会,因为一个季节可以有多个旅馆,而一个酒店可以属于多个季节,所以季节旅馆是多对多的。 在您的BoardSchedule模型上,您应该有这样的东西
public function Schedule(){
return $this->belongsToMany('App\Schedule')
->withPivot('hotel_schedule', 'board_id')
}
public function Board(){
return $this->belongsToMany('App\Board')
->withPivot('hotel_board', 'schedule_id')
}
时间表也可以有很多酒店,而一个酒店可以属于多个时间表,因此就像上面一样,在您的HotelSchedule模型中它又是很多对很多
public function Schedule(){
return $this->belongsToMany('App\Schedule')
->withPivot('hotel_schedule', 'hotel_id')
}
public function Hotel(){
return $this->belongsToMany('App\Schedule')
->withPivot('hotel_schedule', 'schedule_id')
}
希望这会有所帮助。