【发布时间】:2020-04-27 12:25:18
【问题描述】:
我正在尝试执行以下查询。注意我必须在这个查询中使用 named parameters。 我不明白这个问题,因为我似乎只使用命名参数。如何使命名参数起作用?
注意:当我 在 DB 中执行它 或在 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)
【问题讨论】:
-
感谢@TsaiKoga,?标记 非常适合我的问题。请注意,我还必须通过使用 havingRaw() 来修复我的 having() 子句,以便能够使用 distance 别名。
标签: php mysql laravel pdo laravel-query-builder