Reputation: 24059
I'm trying to bind vars to my raw query:
$data = $myModel->select( DB::raw('(3959 * acos(cos(radians(:lat)) * cos(radians(lat)) * cos(radians(lng) - radians(:lng)) + sin(radians(:lat)) * sin(radians(lat)))) as distance'), array(
'lat' => $lat, 'lng' => $lng,
))->orderBy('distance', 'ASC')->having('distance', '<', $radius)
->get();
I've checked various SO posts which lead to this blog post:
http://fideloper.com/laravel-raw-queries
I still get the error:
strtolower() expects parameter 1 to be string, array given
Where am I going wrong?
Upvotes: 3
Views: 871
Reputation: 9835
you must bind variables to raw
method not select
:
$select = "(3959 * acos(cos(radians(:lat)) * cos(radians(lat)) * cos(radians(lng) - radians(:lng)) + sin(radians(:lat)) * sin(radians(lat)))) as distance";
$data = $myModel->select( DB::raw($select,array(
'lat' => $lat, 'lng' => $lng,
)))->orderBy('distance', 'ASC')->having('distance', '<', $radius)
->get();
Or use selectRaw
method directly:
$data = $myModel->selectRaw($select,array(
'lat' => $lat, 'lng' => $lng,
))->orderBy('distance', 'ASC')->having('distance', '<', $radius)
->get();
Upvotes: 2