2016-08-18 7 views
0

Как передать параметры методу в моем запросе, используя whereRaw?Передача параметров методу в запросе с использованием whereRaw

У меня есть «ошибка синтаксиса, неожиданный» «» при попытке добавить «широту» и «долгота», которые являются имена столбцов:.

public function show($lon, $lat, $radio) { 
    $results = Viaje::where($otherStuff) 
        ->whereRaw('radio + ' . $radio . ' <= ' . $this->getDistanceFromLatLonInKm($lat, $lon, . 'latitude, longitude)'); 
    return response()->json($results); 
} 

Если удалить эту точку, я в конечном итоге прохождение 2 поплавков + 2 строки в мой метод вместо требуется 4 поплавков, поэтому я получаю ошибку 500.

public function show($lon, $lat, $radio) 
{ 
    $results = Viaje::where($otherStuff)->whereRaw('radio + ' . $radio . ' <= ' . $this->getDistanceFromLatLonInKm($lat, $lon, 'latitude', 'longitude')); 
    return response()->json($results); 
} 

Edit:

«радио», «долготы» и «широты» являются именами столбцов, содержащих поплавок стоимость.

public function getDistanceFromLatLonInKm($lat1,$lon1,$lat2,$lon2) { 
    $R = 6371; // Radius of the earth in km 
    $dLat = deg2rad($lat2-$lat1); 
    $dLon = deg2rad($lon2-$lon1); 
    $a = sin($dLat/2) * sin($dLat/2) + cos(deg2rad($lat1)) * cos(deg2rad($lat2)) 
     + sin($dLon/2) * sin($dLon/2); 
    $c = 2 * atan2(sqrt($a), sqrt(1-$a)); 
    $d = R * c; // Distance in km 
    return $d; 
} 
+0

в каком виде? – jaysingkar

+0

getDistanceFromLatLonInKm ($ lat1, $ lon1, $ lat2, $ lon2) – lulu666

+0

$ results = Viaje :: where ($ otherStuff) -> whereRaw ('radio +'. $ Radio. '<='. $ This-> getDistanceFromLatLonInKm ($ lat, $ lon, 'широта', 'долгота')); – jaysingkar

ответ

0

Дайте этому попытку:

public function show($lon, $lat, $radio) 
{ 
    $results = Viaje::where($otherStuff)->selectRaw('*,(
           6371 * acos (
           cos (radians($lat)) 
           * cos(radians(latitude)) 
           * cos(radians(longitude) - radians($lon)) 
           + sin (radians($lat)) 
           * sin(radians(latitude)) 
          )  
        )AS distance') 
        ->whereRaw(radio + ' . $radio . ' <= distance') 
        ->get(); 
    return response()->json($results); 
} 
0

Я предполагаю, что радио это имя таблицы, в которой эта Lattitude и долгота колонки, там, если не так, чем заменить радио с именем таблицы вместо радио .longitude и radio.latitude к tablename.latitude и tablename.longitude

public function show($lon, $lat, $radio) { 
      $results = Viaje::where($otherStuff) 
      ->whereRaw('radio + ' . $radio . ' <= ' .$this->getDistanceFromLatLonInKm($lat, $lon,radio.latitude, radio.longitude)); 
return response()->json($results); 
} 
+0

Я только что редактировал свое сообщение, говоря, что «радио», «долгота» и «широта» - это имена столбцов. Имя таблицы - Viaje. – lulu666

+0

и Viaje.latitude не работает, дает мне ошибку 500. – lulu666

+0

Что такое радио и какое значение вы передаете в $ radio, предположим, что радио является именем столбца, в котором вы применяете, где вы можете добавить схему связанных таблиц здесь так что я могу записать запрос для него –

0

вы можете попробовать это и посмотреть, что она производит результаты публичной функции шоу ($ долготы , $ lat, $ radio) {

$results = Viaje::where($otherStuff)->select('fields','radio + '. $radio .'as total_radio') 
       ->whereRaw('total_radio <='. function($q) use ($lat,$lot,$this) { 
        return $this->getDistanceFromLatLonInKm($lat, $lon,$q->select('lattitude'), $q->select('longitude')); 
     }); 
return response()->json($results); 
} 
+0

Laravel не позволяет мне помещать $ this, поэтому я помещаю $ radio, я продолжаю errorException: Объект класса Closure не может быть преобразован в строку. Я пытался понять эту ошибку без успеха, любую идею? – lulu666

+0

Удалите параметр $ this из функции и сделайте эту функцию getDistanceFromLatLonInKm() статической, а не используйте ее. решит вашу проблему. –

+0

Не работает, такая же ошибка: S И странно, что она указывает на строку, где у меня есть:}); – lulu666

Смежные вопросы