与laravel关系的怀疑

时间:2018-07-19 18:17:19

标签: laravel eloquent relationship

我创建此架构以节省特定季节中特定板的价格

例如:旅馆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?

谢谢

1 个答案:

答案 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')
}

希望这会有所帮助。