laravel - Laravel 关系查询 - 获取所有已完成的项目
问题描述
寻找有关创建雄辩查询的一些建议。
我有 3 张桌子
- 项目
- 任务
- 用户任务
一个项目有任务,我们在 usertasks 中保存任务和用户 ID,这样我们就知道它已经被用户完成了。现在我需要查询用户已完成的所有项目,因此项目中包含该项目的所有任务都已完成的任务。
我似乎无法理解它,我正在尝试为此创建一个范围。
public function scopeisCompleted($query)
{
$query = $query->whereHas('userTasks', function ($query) {
$query->where('user_id', '=', Auth::user()->id);
})->get();
return $query;
}
我似乎无法弄清楚如何确保该项目的所有任务都由用户完成。
关于前进的任何建议?
解决方案
我认为你需要这样的东西:
public function scopeisCompleted($query)
{
$query = $query->whereHas('userTasks', function ($query) {
$query->where('user_id', '=', Auth::user()->id)
->whereHas('task', function ($query) {
$query->where('completed', 1);
});
})->get();
return $query;
}
因此,只要为模型和列task
设置了关系,如果没有将其更改为正确的列。UserTask
completed
我刚刚更详细地阅读了您的问题,如果您需要检查所有任务是否已完成,那么这将有点复杂,查询将需要查找有多少任务以及该数字是否与完成的任务总数匹配。
更新
我想我现在对您正在尝试做的事情有了更多的了解:
public function scopeisCompleted($query)
{
$query = $query->with('tasks', 'userTasks')->whereHas('userTasks', function ($query) {
$query->where('user_id', '=', Auth::user()->id);
})->get();
return $query;
}
正如评论中提到的,我不确定这个范围正在使用什么模型,所以这可能仍然不正确,但是在这里我添加了->with('tasks')
这样,一旦返回查询结果,项目的任务就可以与用户为项目完成的任务相比,尽管在查询中而不是在 PHP 中应该仍然可以做到这一点。
if (count($results->tasks)) == count($results->userTasks)) {
// complete
}
稍后我需要考虑一下,对于您要执行的操作,我可能有错误的语法,并且with
可能需要类似于->with('tasks.userTasks')
.
推荐阅读
- ios - 如何在 Swift 3 中检查当前 ViewController?
- c++ - 在 C++ 中给出错误输出的阶乘问题
- android - Android Studio 和 Google Maps API 片段崩溃
- grammar - 从语法中导出正则表达式
- c - 我们可以在 getopt 中添加更多选项吗?
- r - 在 Windows 机器上的 R 控制台中安装 rJava 时出错
- winapi - 以非提升方式运行时,为提升的应用程序调用 LowLevelKeyboardProc
- javascript - 在 Node/raw ES6 中,我如何从父类发出事件并从它们各自的构造函数触发子类中的事件?
- spring - spring boot 2 + feign + eureka 客户端不会将服务名称解析为 URL
- variables - 如何检查 Kotlin 变量的类型