首页 > 解决方案 > 模型与自身的关系 Laravel

问题描述

我有一张课程表。我希望某些课程成为其他课程的先决条件。我将这些课程称为目标和先决条件。我制作了一个先决条件模型和先决条件表,如下所示。我可以在课程模型中使用 oneToMany 检索课程->先决条件。我想建立先决条件->课程关系,但无法确定在先决条件模型中建立这种关系的语法。

这是我的迁移:

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 但似乎没有任何效果。问题似乎与不使用标准外键有关(这不起作用,因为您不能在 Prerequisites 表中重复 course_id 作为列名)。任何人都知道如何编写关系以从先决条件中获得教训?

提前致谢。

标签: laravelmodelrelationship

解决方案


推荐阅读