我正在使用Laravel 5,并试图让我的头脑关系。
我有2张桌子,学生和房间。每个房间可以有很多学生,每个学生可以有很多房间。
这是两个方向的多对多关系吗?我需要一个数据透视表来实现这个目标吗?
答案 0 :(得分:1)
答案 1 :(得分:1)
是的,你描述的是多对多的关系,为此你需要一个数据透视表。
您的三个表格如下所示: (这可能与您的实际表格不同)
students
id (primary key)
name
age
rooms
id (primary key)
room_size
bedroom_count
注意:默认情况下,数据透视表的名称由两个模型名称(单数形式)按字母顺序组成。所以在这种情况下:学生+房间= room_student。
room_student
(数据透视表)
room_id (foreign key to 'rooms')
student_id (foreign key to 'students')
数据透视表迁移:
class CreateRoomStudentTable extends Migration
{
public function up()
{
Schema::create('room_student', function (Blueprint $table) {
$table->unsignedInteger('room_id');
$table->unsignedInteger('student_id');
// Primary key
$table->primary(['room_id', 'student_id']);
// Both foreign keys
$table->foreign('room_id')
->references('id')
->on('rooms')
->onDelete('cascade');
$table->foreign('student_id')
->references('id')
->on('students')
->onDelete('cascade');
});
}
// ...
Room
和Student
型号:
class Room extends Model {
// ...
public function students()
{
$this->belongsToMany(App\Student::class);
}
}
class Student extends Model {
// ...
public function rooms()
{
$this->belongsToMany(App\Room::class);
}
}
答案 2 :(得分:0)
是的,你可以实现多对多关系,你肯定需要数据透视表来实现多对多的关系。 在这种情况下,您可以创建像room_student这样的数据透视表,并在其中添加room_id和student_id列。然后只需在模型中使用belongsToMany方法定义关系,并记住在你想要附加功能时使用附加方法。
答案 3 :(得分:0)