0

我正在尝试使用 Eloquent 在 Laravel 5.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();

但我总是得到错误:

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

谁能帮我解决这个问题?非常感谢您的时间和帮助。

4

2 回答 2

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();
于 2017-02-08T17:04:38.820 回答
0

如果你和ieProject.phphasMany关系categories

public function categories() 
{
    return $this->hasMany(Category::class); 
}

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

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

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

$project->load('categories');

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

于 2017-02-08T17:07:51.693 回答