如何用 eloquent 在 Laravel 中只获取一个用户数据?
Posted
技术标签:
【中文标题】如何用 eloquent 在 Laravel 中只获取一个用户数据?【英文标题】:How to get just one user data in Laravel with eloquent? 【发布时间】: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 的进程。
【问题讨论】:
【参考方案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()
- 你必须最后找到,但是。以上是关于如何用 eloquent 在 Laravel 中只获取一个用户数据?的主要内容,如果未能解决你的问题,请参考以下文章