如何根据 ID 显示 Table 关系中的数据来自第一个 table LARAVEL

How to Display Data from Table relationship base on ID come from first table LARAVEL

我有 3 个 table、table 门课程、table 个章节和 table 个教学大纲。 table 课程与 table 部分相关,table 部分与 table 教学大纲相关。为了在下面说明我的 table 看起来像:

#Table 课程:

public function up()
    {
        Schema::create('courses', function (Blueprint $table) {
            $table->id();
            $table->unsignedBigInteger('user_id');
            $table->foreign('user_id')->references('id')->on('users')->onDelete('cascade')->onUpdate('cascade');
            $table->unsignedBigInteger('category_id')->default('1');
            $table->foreign('category_id')->references('id')->on('categories')->onDelete('cascade')->onUpdate('cascade');
            $table->string('title');
            $table->string('status')->default('publish');
            $table->text('content')->nullable();
            $table->timestamps();
        });
    }

Table 栏目:

public function up()
    {
        Schema::create('sections', function (Blueprint $table) {
            $table->id();
            $table->unsignedBigInteger('course_id');
            $table->foreign('course_id')->references('id')->on('courses');
            $table->string('name');
            $table->timestamps();
        });
    }

和最后一个 table 教学大纲:

public function up()
    {
        Schema::create('syllabuses', function (Blueprint $table) {
            $table->id();
            $table->unsignedBigInteger('section_id');
            $table->foreign('section_id')->references('id')->on('sections')->onDelete('cascade')->onUpdate('cascade');
            $table->string('title')->nullable();
            $table->text('content')->nullable();
            $table->text('description')->nullable();
            $table->timestamps();
        });
    }

现在我不得不根据章节 ID 显示来自 table 教学大纲的数据,其中章节根据课程 ID 显示,因为我不知道如何从每一行中获取 ID与 Sections 的 ID 相关以放入 Syllabus::where('section_id',???)->get();。任何能帮助我的人都非常感激。希望你明白我的意思。

在你看到的图片下面,我做了一些注释让你明白。绿框一的问题

enter image description here

您需要研究 laravel 属于您的情况下的关系。

在您的教学大纲模型中添加。

public function section(){
  return $this->belongsTo(Section::class, 'section_id');
}

然后您可以使用它来获取与这些部分相关的所有教学大纲。

Syllabus::with('section')->get();

首先在模型中定义关系。 我假设您的模型是:Course、Section 和 Syllabus

// Model Course
public function sections()
{
     return $this->hasMany(Section::class);
}

// Model Section
public function course()
{
    return $this->belongsTo(Course::class);
}

public function syllabuses()
{
    return $this->hasMany(Syllabus::class);
}

// Model Syllabus
public function section()
{
    return $this->belongsTo(Section::class);
}

现在在您的控制器中,您可以通过

获取您指定的课程
// Controller Course

public function show($id)
{
    $course = Course::with('sections', 'sections.syllabuses')->where('id', $id)->first();
}

在此查询中,您有来自“课程”table 的模型、来自“章节”table 的相关模型以及来自“教学大纲”table 的所有相关模型。如果您使用的是 laravel 的 blade,那么您只需通过以下方式访问它们:

// course
{!! $course->your_attribute !!}

// to access sections
@foreach($course->sections as $section)

@endforeach

// to access syllabuses
@foreach($course->sections as $section)
     @foreach($section->syllabuses as $syllabus)
          // Here you will have syllabuses for individual sections
     @endforeach
@endforeach

https://laravel.com/docs/8.x/eloquent-relationships#one-to-many