【问题标题】:How to get just one user data in Laravel with eloquent?如何用 eloquent 在 Laravel 中只获取一个用户数据?
【发布时间】:2021-08-13 01:04:24
【问题描述】:

我使用 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;
}

这个回报:

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

【问题讨论】:

    标签: laravel eloquent foreign-keys relationship laravel-8


    【解决方案1】:

    With() 方法可以使用特定的数组注释来限制急切加载。这在documentation 中也有描述。

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

    【讨论】:

    • 是的,就用那个答案吧 ;-) 可能想要使用 find($userId) 而不是 where('id', $userId) 并且也以这种方式摆脱 first() - 你必须最后找到,但是。
    猜你喜欢
    • 1970-01-01
    • 2021-08-30
    • 1970-01-01
    • 2020-11-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-03-12
    相关资源
    最近更新 更多