雄辩的加入子查询的地方

时间:2017-02-08 16:46:17

标签: laravel eloquent laravel-5.4

我正在尝试使用Eloquent在Laravel 5.4中执行此查询,并且我没有使子查询正常运行。这是原始的SQL查询:

NotFoundHttpException in RouteCollection.php line 161:

这就是我要做的事情:

select * from projects p
        inner join projects_categories pc on p.id = pc.project_id
where pc.name in (select pc.name from projects p
                      inner join projects_categories pc on p.id = pc.project_id
                  where p.id = $project->id) and p.id <> $project->id;

但是我一直收到错误:

缺少Illuminate \ Database \ Query \ Builder :: whereIn()。

的参数2

有人可以帮我吗?非常感谢你的时间和帮助。

2 个答案:

答案 0 :(得分:0)

试试这个:

Project::join('projects_categories', 'projects.id', '=', 'projects_categories.project_id')
->whereIn('projects_categories.name', function($query) use($project) {
    $query->select('projects_categories.name')->from('projects')
    ->join('projects_categories', 'projects.id', '=', 'projects_categories.project_id')
    ->where('projects.id', '=', $project->id);
})->where('projects.id', '<>', $project->id)->get();

答案 1 :(得分:0)

如果在Project.php hasMany categories之间存在public function categories() { return $this->hasMany(Category::class); } 关系,即

Project::find($id)->with('categories');

那么你应该能够如此雄辩地回归这段关系:

$project->load('categories');

或者如果您已经加载了项目对象

Run Snippet below...

我会查看Laravel文档,因为您发布的联接看起来过于复杂!