2017-02-08 4 views
0

Ich versuche, diese Abfrage in Laravel 5.4 mit Eloquent zu tun, und ich bekomme nicht die Unterabfrage zu funktionieren, wie es sollte. Dies ist die ursprüngliche SQL-Abfrage:Eloquent wo in mit Unterabfrage verbinden

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; 

Das ist, was ich versuche zu tun:

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

Aber die ganze Zeit, die ich den Fehler zurück:

fehlt Argument 2 für Illuminate \ Datenbank \ Abfrage \ Builder :: whereIn().

Könnte mir jemand dabei helfen? Vielen Dank für Ihre Zeit und Hilfe.

Antwort

0

Try this:

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

Ja !!! Vielen Dank, das ist !! – jandro935

0

Wenn in Project.php Sie haben eine hasMany Beziehung für categories dh

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

Dann sollten Sie in der Lage sein, die Beziehung zurückzukehren eloquent wie so:

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

Oder wenn Sie bereits eine haben Projektobjekt geladen

Ich würde die Laravel-Dokumentation auschecken, da die beitreten Sie sieht übermäßig kompliziert!

+0

Ja, wirklich die optimale Situation ist, wie Sie kommentieren, aber was ich brauche, ist ein sehr spezifischer Fall, in dem diese Abfrage erforderlich ist. Wie auch immer, danke für deine Hilfe !! – jandro935

Verwandte Themen