2017-02-08 3 views
0

Eloquent를 사용하여 Laravel 5.4에서이 쿼리를 수행하려고하는데 하위 쿼리가 제대로 작동하지 않습니다.Eloquent Where With 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 누락이 원래 SQL 쿼리입니다 \ Database \ Query \ Builder :: whereIn().

아무도 도와 줄 수 없습니까? 시간을내어 도와 주셔서 대단히 감사합니다.

답변

0

이 시도 : Project.php 당신이 categories

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

에 대한 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