我使用的是laravel,数据库中有一个表叫做'course'。它有一些字段,如“标题”、“内容”等。。。而且我也希望一门课程有一些先决条件(其他课程)。我该如何实现这一点?我可以通过自我引用外键来实现这一点,但这样一来,课程就只有一个先决条件了。
tct7dpnv1#
由于一门课程可以有多个先决条件,而一个先决条件属于多个课程,因此它是一个n:m关系。创建数据透视表 course_prerequisite 带着田野 id , course_id , prerequisite_id .在课程模型中添加 prerequisites() 方法 BelongsToMany 这样的关系:
course_prerequisite
id
course_id
prerequisite_id
prerequisites()
BelongsToMany
prerequisites() : BelongsToMany { return $this->belongsToMany(Course::class, 'course_prerequisite', 'course_id', 'prerequisite_id') }
如果需要反向关系,请添加 courses 方法 BelongsToMany :
courses
courses() : BelongsToMany { return $this->belongsToMany(Course::class, 'course_prerequisite', 'prerequisite_id', 'course_id') }
2cmtqfgy2#
有很多可行的方法可以做到这一点。我提到了两种方法。方法1:您可以这样创建课程表。
Create table courses( id int(10) not null primary key, title varchar(25), content varchar(255) );
现在为先决条件Map创建另一个表。
create table prerequisites( course_id int(10), prerequisite_id int(10), foreign key (course_id) references courses(id), foreign key (prerequisite_id) references courses(id) )
方法2:另一种方法是在courses表中为prerequisites courses添加新列。虽然不能以这种方式添加外键约束,但可以通过编程方式进行管理。
Create table course( id int(10) not null primary key, prerequisites varchar(250), title varchar(25), content varchar(255) )
2条答案
按热度按时间tct7dpnv1#
由于一门课程可以有多个先决条件,而一个先决条件属于多个课程,因此它是一个n:m关系。
创建数据透视表
course_prerequisite
带着田野id
,course_id
,prerequisite_id
.在课程模型中添加
prerequisites()
方法BelongsToMany
这样的关系:如果需要反向关系,请添加
courses
方法BelongsToMany
:2cmtqfgy2#
有很多可行的方法可以做到这一点。我提到了两种方法。
方法1:
您可以这样创建课程表。
现在为先决条件Map创建另一个表。
方法2:
另一种方法是在courses表中为prerequisites courses添加新列。虽然不能以这种方式添加外键约束,但可以通过编程方式进行管理。