0

laravel의 쿼리 작성기를 사용하여 데이터베이스에서 위치를 가져옵니다. 두 테이블을 조인 한 다음 결과를 위치별로 쿼리해야합니다. 조인을 추가 할 때까지 모든 것이 잘 동작했습니다.Laravel 쿼리 작성기가 selectRaw와 작동하지 않습니다.

난 그냥

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

을 할 경우 그 다음은 내가 필요로하는 두 테이블의 내용을 반환합니다. 내가 할 경우

$locations = DB::table('locations') 
      ->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(); 

그런 다음 위치 테이블의 내용을 가져 와서 필터가 올바르게 작동합니다.

두 가지를 모두 넣었으며 오류가없는 위치의 콘텐츠 만 반환하고 자선 테이블은 조인되지 않았습니다.

$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

모든 열에 대해 테이블의 이름을 지정하십시오. – MosCH

+0

자선 단체 테이블에서 오는 유일한 것은 이미 가입 장소와 자선 로고가있는 자선 단체 이름입니다. 그 외 모든 것은 위치 탭에서옵니다. – craigb88

+0

죄송합니다. 게시물을 제대로 읽지 못했습니다. 각 열의 테이블을 지정 했으므로 매력이 있습니다! 감사 – craigb88

답변

0

MosCH 의견을 작성한 후 꽤 간단한 수정으로 다음 코드를 참조하십시오. 내가 where.charity를 ​​where 절에 지정했음을 알게 될 것입니다. 왜냐하면 자선 단체가 내가 참여하는 것이기 때문에 그것이 상충되는 것 같아요.

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