Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Binding vars to raw queries

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?

like image 572
panthro Avatar asked May 21 '26 12:05

panthro


1 Answers

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();
like image 103
Razor Avatar answered May 24 '26 17:05

Razor



Donate For Us

If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!