2017-02-08 4 views
0

Я пытаюсь выполнить этот запрос в Laravel 5.4 с Eloquent, и я не получу подзапрос, чтобы он функционировал так, как должен. Это оригинальный SQL-запрос:Eloquent Where In With Join Subquery

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 для Illuminate \ Database \ Query \ Builder :: где().

Может ли кто-нибудь помочь мне с этим? Большое вам спасибо за ваше время и помощь.

ответ

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

Да !!! Большое вам спасибо! – jandro935

0

Если в Project.php у вас есть hasMany отношения к categories т.е.

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

Тогда вы должны быть в состоянии вернуть отношения красноречиво так:

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

Если у вас уже есть объект проекта загружен

$project->load('categories'); 

Я бы заказал документацию в Laravel, так как вы присоединились к вам, выглядит слишком сложно!

+0

Да, действительно, оптимальная ситуация - это то, как вы комментируете, но мне нужен очень конкретный случай, когда требуется этот запрос. В любом случае, спасибо за вашу помощь !! – jandro935