如何根据 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
我有 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