0

Ich benutze Larawel Abfrage-Builder, um Standorte aus meiner Datenbank zu holen. Ich muss 2 Tabellen beitreten und dann die Ergebnisse nach Standort abfragen. Es hat alles gut funktioniert, bis ich den Beitritt hinzugefügt habe.Laravel Query Builder Join funktioniert nicht mit selectRaw

Wenn ich nur

$locations = DB::table('locations') 
->join('charities', 'locations.charity', '=', 'charities.charity') 
    ->when($charity, function ($query) use ($charity) { 
      return $query->where('charity', '=', $charity); 
    }) 
    ->get(); 

Dann ist es den Inhalt der beiden Tabellen zurück, die ich brauche. Wenn ich es tue

Dann bekomme ich den Inhalt der Standorte Tabelle und der Filter funktioniert gut.

Ich habe die beiden zusammen und es gibt nur den Inhalt der Standorte ohne Fehler und die Wohltätigkeits-Tabelle wurde nicht beigetreten.

$locations = DB::table('locations') 
      ->join('charities', 'locations.charity', '=', 'charities.charity') 
      ->select('locations.*') 
      ->selectRaw('(3959 * acos(cos(radians(?)) * 
           cos(radians(latitude)) 
           * cos(radians(longitude) - radians(?) 
           ) + sin(radians(?)) * 
           sin(radians(latitude))) 
          ) AS distance', [$lat, $lng, $lat]) 
      ->havingRaw("distance < ?", [$max_distance]) 
      ->when($charity, function ($query) use ($charity) { 
       return $query->where('charity', '=', $charity); 
      }) 
      ->get(); 
+1

Versuchen Sie, für jede Spalte den Namen der Tabelle anzugeben, von der sie kommt. – MosCH

+0

Das einzige, was aus dem Charity-Tisch kommt, ist der Wohltätigkeitsname, der bereits in den Orten ist, an denen man sich beteiligen kann, und ein Charity-Logo. Alles andere kommt von den Standorten Tabelle – craigb88

+0

Sorry habe Sie nicht richtig lesen gelesen, ich habe die Tabellen für jede Spalte angegeben und es funktioniert ein Charme! Vielen Dank – craigb88

Antwort

0

Nach MosCH Kommentar Ich habe es funktioniert, Ziemlich einfach beheben, falls jemand anderes dieses Problem hat, siehe meinen Code unten. Sie werden feststellen, dass ich locations.charity in der WHERE-Klausel angegeben habe. Da die Wohltätigkeitsorganisation das ist, woran ich mich beteilige, denke ich, dass es widersprüchlich war.

$locations = DB::table('locations') 
      ->join('charities', 'locations.charity', '=', 'charities.charity') 
      ->select('*') 
      ->selectRaw('(3959 * acos(cos(radians(?)) * 
           cos(radians(latitude)) 
           * cos(radians(longitude) - radians(?) 
           ) + sin(radians(?)) * 
           sin(radians(latitude))) 
          ) AS distance', [$lat, $lng, $lat]) 
      ->havingRaw("distance < ?", [$max_distance]) 
      ->when($charity, function ($query) use ($charity) { 
       return $query->where('locations.charity', '=', $charity); 
      }) 
      ->get(); 
Verwandte Themen