2016-07-25 27 views
3

Ein bisschen Ärger mit dem eloquenten Rahmen für Laravel.WhereNotExists Laravel Eloquent

Ich brauche eine Abfrage wie folgt zu replizieren:

SELECT * 
FROM RepairJob 
WHERE NOT EXISTS (SELECT repair_job_id 
    FROM DismissedRequest 
    WHERE RepairJob.id = DismissedRequest.repair_job_id); 

Im Moment habe ich

$repairJobs = RepairJob::with('repairJobPhoto', 'city', 'vehicle')->where('active', '=', 'Y')->whereNotExists('id', [DismissedRequest::all('repair_job_id')])->get(); 

jemand eine Idee? Ich brauche alle repairjobs zu bekommen, wo es keine Aufzeichnungen Tabelle in den entlassenen Anfragen ist

ich diese Fehlermeldung erhalten, wenn die Abfrage über

Argument 1 passed to Illuminate\Database\Query\Builder::whereNotExists() must be an instance of Closure, string given 
+3

'whereNotExists' nimmt eine Funktion und ändert die' $ query'. Siehe die Dokumentation für 'whereExists' hier: https://laravel.com/docs/5.0/queries#advanced-wheres – swatkins

+0

das ist nicht eloquent? – Sytham

Antwort

2

Versuchen doesntHave() Methode. Annahme von "followedRequests" als Beziehungsname im RepairJob-Modell.

$jobs = RepairJob::with('repairJobPhoto', 'city', 'vehicle') 
    ->where('active', 'Y')->doesntHave('dismissedRequests')->get(); 
+0

Vielen Dank für die Antwort, aber wenn ich diese Codezeile ändere, erhalte ich den Fehler, der oben im Update erwähnt wurde. irgendwelche Ideen? – Sytham

+0

Also, ich denke, dass Sie Barryvdh/Laravel-Cors-Paket für CORS Handhabung verwenden. Stellen Sie sicher, dass Sie die Cors-Middleware auf eine Route oder Gruppe anwenden, um CORS-Unterstützung hinzuzufügen. Beispiel: 'Route :: group (['Middleware' => 'cors'], Funktion (Router $ router) { $ router-> get ('api', 'ApiController @ index'); });'. Ein anderer Weg ist das Hinzufügen von 'cors' als globale Middleware, wenn Sie es für alle Ihre Routen anwenden möchten. – Phargelm

+0

Danke, dieser Code ist sauber und funktioniert, das Problem war ein Syntaxfehler :) :) – Sytham

1

Versuchen Sie dies mit:

$repairJobs = RepairJob::with('repairJobPhoto', 'city', 'vehicle')->where('active', '=', 'Y')->whereNotExists(function($query) 
      { 
       $query->select(DB::raw(1)) 
         ->from('DismissedRequest') 
         ->whereRaw('RepairJob.id = DismissedRequest.id'); 
      })->get(); 
+0

Bekam den gleichen Fehler wie mit dem Code von Phargelm, siehe oben, irgendwelche Ideen? Danke für die Antwort – Sytham

+0

Yest das ist CORS - richtig konfigurieren Sie Ihren Server (appache, nginx,?) Und eine neue Frage erstellen - nicht diese zwei Fragen hier mischen. –