Laravel 雄辩的Where In With Join子查询

Laravel 雄辩的Where In With Join子查询,laravel,eloquent,laravel-5.4,Laravel,Eloquent,Laravel 5.4,我试图在Laravel5.4中以雄辩的方式执行此查询,但我没有让子查询按其应有的方式运行。这是原始SQL查询: 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 p

我试图在Laravel5.4中以雄辩的方式执行此查询,但我没有让子查询按其应有的方式运行。这是原始SQL查询:

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;
这就是我想做的:

 Project::join('projects_categories', 'projects.id', '=', 'projects_categories.project_id')
        ->whereIn([
            ['projects_categories.name', function ($query) {
            $query->select('projects_categories.name')
                ->from('projects')
                ->join('projects_categories', 'projects.id', '=', 'projects_categories.project_id')
                ->where('project.id', '=', $project->id);
        }],
            ['projects.id', '<>', $project->id]
        ])
    ->get();
但每次我都会发现错误:

Illumb\Database\Query\Builder::where缺少参数2

有人能帮我吗?非常感谢您的时间和帮助。

试试这个:

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();
如果在Project.php中,您对类别有很多关系,例如

然后,你应该能够像这样雄辩地回复关系:

Project::find($id)->with('categories');
或者如果已经加载了项目对象

$project->load('categories');

我会签出Laravel文档,因为你发布的加入看起来太复杂了

是的,最理想的情况是你如何评论,但我需要的是一个非常具体的案例,在这个案例中需要查询。无论如何,谢谢你的帮助!!如果我们没有定义relationship和forignkey,这个relationship方法有效吗?在这个场景中,您必须在名为categoories的项目模型上定义一个关系。如果您没有使用雄辩的关系,那么在我看来,您并没有真正获得使用Laravel框架的主要好处
$project->load('categories');