如何使用 eloquent 在 Laravel 中仅获取一个用户数据?

问题描述

我使用 Laravel 8。我想获取用户进程课程,但我获取所有用户进程。

在 User.PHP

  public function courses()
    {
        return $this->belongsToMany(Course::class);
    }

Course.PHP

public function progresses()
 {
    return $this->hasMany(Progress::class);
 }

Progress.PHP 为空。

课程表

Schema::create('courses',function (Blueprint $table) {
        $table->id();
        $table->string('title');
        ...
        $table->timestamps();
    });

进度表

    Schema::create('progress',function (Blueprint $table) {
        $table->id();
        $table->foreignId('user_id')->constrained()->onDelete('cascade');
        $table->foreignId('course_id')->constrained()->onDelete('cascade');
        $table->integer('percent');
        $table->timestamps();
    });

课程控制器

public function index()
{
    $userCourses = User::where('id',1)->with('courses.progresses')->first();
    return $userCourses;
}

这个回报:

enter image description here

但我只想要 user_id = 1 的过程。

解决方法

With() 方法可以使用特定的数组注释来限制预先加载。这也在 documentation 中进行了描述。

$userId = 1;

$userCourses = User::where('id',$userId)
    ->with(
        [
            'courses.progresses' => function ($query) use ($userId) {
                $query->where('user_id',$userId)
            },]
     )->first();