首页 > 解决方案 > 如何在 Laravel 中检索特定课程的课程内容?

问题描述

我正在创建一个在线课程网站。我在检索特定课程的课程内容时遇到问题。

此功能还显示了不同课程的所有内容。我想显示特定课程的内容。

public function index()
{
    $contents = Content::all();
    return view('content.index', compact('contents'));
}

这是我的内容模型。

class Content extends Model
{

protected $fillable = [
    'topic', 'content',
];

public function course()
{
    return $this->belongsTo('App\Course');
}
}

这是课程模型。

class Course extends Model
{
    protected $fillable = [
        'title', 'about', 'image',
    ];

public function contents(){
    return $this->hasMany('App\Content');
}
}

内容迁移

public function up()
{
    Schema::create('contents', function (Blueprint $table) {
        $table->bigIncrements('id');
        $table->integer('course_id');
        $table->string('content');
        $table->string('topic');
        $table->timestamps();
    });
}

内容索引刀片

@foreach ($contents as $content)
  <div class="col-lg-12 content-list">
    <a href="/content/{{$content->id}}">
      <div class="cl-item mb-2" style="border-radius: 8px; padding: 18px; background-color: #c2c6ca;">
      <h4 class="m-0">{{$content->topic}}</h4>
      </div>
    </a>
  </div>
@endforeach

标签: laravellaravel-6

解决方案


您需要创建web.php如下路线:

Route::get('/courses/{course_id}/contents', 'ContentController@get')->name('web.course_contents');

在上面的代码库中,我们传递了我们想要为其获取内容的“course_id”参数。

在 ContentController.php 中,执行以下操作:

class ContentController extends Controller
{
    get($course_id)
    {
        $contents = Content::where('course_id', $course_id)->get();
        return view('content.index', compact('contents'));
    }
}

Content::where('course_id', $course_id)->get()将对您的数据库运行select * from contents where course_id = ?查询。您可以通过执行以下操作来检查:

class ContentController extends Controller
{
    get($course_id)
    {
        $contents = Content::where('course_id', $course_id)->get();
        logger(Content::where('course_id', $course_id)->toSql());
        return view('content.index', compact('contents'));
    }
}

您可以在此处了解有关 Laravel 查询构建器的更多信息。

快乐编码!


推荐阅读