与自身的模型关系

时间:2020-11-09 15:37:06

标签: laravel model relationship

我有一张课表。我希望某些课程成为其他课程的前提条件。我将这些课程称为目标和前提条件。我已经制作了一个前提条件模型和前提条件表,如下所示。 我可以在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作为列名)。 任何人都知道如何编写关系以从先决条件中获得教训吗?

谢谢。

0 个答案:

没有答案
相关问题