2017-02-08 12 views
0

私はLaravel 5.4でEloquentを使用してこのクエリを実行しようとしていますが、サブクエリは機能するようにはなりません。これは、元のSQLクエリです:Eloquent In With Joinサブクエリ

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(); 

しかし、私は戻ってエラーを取得するすべての時間:を照らしため

欠落引数2を\ Database \ Query \ Builder :: whereIn()。

誰でも私にこれを手伝ってもらえますか?あなたの時間と助けをありがとう、ありがとう。

答えて

0

このお試しください:Project.phpにあなたが

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

すなわちcategoriesためhasMany関係を持っているなら、あなたが雄弁にそのような関係を返すことができるはずです

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(); 
+0

はい!どうもありがとうございました!! – jandro935

0

を:

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

または、既にプロジェクトオブジェクトがロードされました

$project->load('categories'); 

投稿した参加が過度に複雑になっているため、Laravelのドキュメントをチェックアウトします。

+0

はい、本当に最適な状況はあなたのコメントですが、私が必要とするのは、そのクエリが必要な非常に特殊なケースです。とにかく、助けてくれてありがとう! – jandro935