带有Laravel Eloquent和命名绑定的SQL查询:混合的命名和位置参数

问题描述 投票:0回答:3

我正在尝试执行以下查询。注意我必须在此查询中使用命名参数。我不明白这个问题,因为似乎我只是在使用命名参数。如何使命名参数起作用?

注:当我在数据库中执行它]或在laravel中使用简单的[[DB :: table(users)-> select($ sql_with_values_inside)时,查询是完全正常的

我是Laravel的新手,所以也许我做错了。

查询

$latitude = (float)$latitude; $longitude = (float)$longitude; $radius = (float)$radius; $sql = '`firstname`,`lastname`,`email`, ST_X(`coordinates_public`) AS latitude, ST_Y(`coordinates_public`) AS longitude, (6371 * ACOS(COS(RADIANS(:latitude)) * COS(RADIANS(ST_Y(coordinates_private))) * COS(RADIANS(ST_X(coordinates_private)) - RADIANS(:longitude)) + SIN(RADIANS(:latitude)) * SIN(RADIANS(ST_Y(coordinates_private))))) AS distance'; $washers = DB::table('users') ->selectRaw($sql, ['latitude' => $latitude,'longitude'=> $longitude,'radius'=> $radius]) ->whereRaw('MBRContains ( LineString ( Point ( :longitude + :radius / (111.320 * COS(RADIANS(:latitude))), :latitude + :radius / 111.133 ), Point ( :longitude - :radius / (111.320 * COS(RADIANS(:latitude))), :latitude - :radius / 111.133 )), `coordinates_private` )', ['latitude' => $latitude,'longitude'=> $longitude,'radius'=> $radius]) ->having('distance < :radius', ['radius'=> $radius]) ->orderBy('distance') ->get();

错误

Illuminate\Database\QueryException: SQLSTATE[HY093]: Invalid parameter number: mixed named and positional parameters (SQL: select `firstname`,`lastname`,`email`, ST_X(`coordinates_public`) AS latitude, ST_Y(`coordinates_public`) AS longitude, (6371 * ACOS(COS(RADIANS(:latitude)) * COS(RADIANS(ST_Y(coordinates_private))) * COS(RADIANS(ST_X(coordinates_private)) - RADIANS(:longitude)) + SIN(RADIANS(:latitude)) * SIN(RADIANS(ST_Y(coordinates_private))))) AS distance from `users` where MBRContains ( LineString ( Point ( :longitude + :radius / (111.320 * COS(RADIANS(:latitude))), :latitude + :radius / 111.133 ), Point ( :longitude - :radius / (111.320 * COS(RADIANS(:latitude))), :latitude - :radius / 111.133 ) ), `coordinates_private`) having `distance < :radius` = 4.8312518210935 order by `distance` asc)
我正在尝试执行以下查询。注意我必须在此查询中使用命名参数。我不明白这个问题,因为似乎我只是在使用命名参数。如何命名...
php mysql laravel pdo laravel-query-builder
3个回答
0
投票
我不确定这是否是问题,但据我所知,您不能多次使用相同的参数名称,例如对于这部分查询:

0
投票
在选择中,您没有:radius,但尝试将其绑定。应该是

0
投票
摘自PHP手册:
© www.soinside.com 2019 - 2024. All rights reserved.