我有一张课表。我希望某些课程成为其他课程的前提条件。我将这些课程称为目标和前提条件。我已经制作了一个前提条件模型和前提条件表,如下所示。 我可以在Lesson模型中使用oneToMany检索Lesson->前提条件。 我想建立Prerequisite-> Lesson关系,但是无法计算出在Prerequisites模型中建立这种关系的语法。
这是我的移民:
Schema::create('lessons', function (Blueprint $table)
{
$table->id();
$table->foreignId('course_id');
$table->string('title');
$table->string('blurb');
$table->string('description');
$table->string('YouTube');
$table->integer('order_in_course');
$table->timestamps();
$table->softDeletes();
});
Schema::create('prerequisites', function (Blueprint $table)
{
$table->foreignID('goal');
$table->foreignID('prerequisite');
$table->foreignID('status_id');
$table->integer('status_repetitions_required');
$table->integer('spacing_id');
$table->timestamps();
$table->softDeletes();
});
这是课程模型:
public function prerequisites()
{
return $this->hasMany(Prerequisite::class, 'goal');
}
和先决条件模型:
public function lesson()
{
return $this->belongsTo(Lesson::class, 'prerequisite');
}
这是我正在运行的测试:
/**
* prerequisite_to_lesson_relationship
* @test
*/
public function prerequisite_to_lesson_relationship()
{
$this->withoutExceptionHandling();
/** make lessons and prerequisite */
$goal = Lesson::factory
( [ 'title' => 'Goal Lesson' ,] ) -> create();
$prerequisite = Lesson::factory
( [ 'title' => 'Prerequisite Lesson', ] )->create();
$this->seed(PrerequisiteSeeder::class);
/** now get the lesson from the prerequisite using controller method getLessonFromPrerequisite*/
$lessonFromPrerequisite = $prerequisite->lesson;
dd($lessonFromPrerequisite);
}
当我运行测试时,dd()返回'null'。
我试图在Prerequisite模型中编写belongsTo,但是似乎没有任何效果。问题似乎出在不使用标准外键的问题上(这是行不通的,因为您不能在主题表中重复将lesson_id作为列名)。 任何人都知道如何编写关系以从先决条件中获得教训吗?
谢谢。