【问题标题】:Laravel:语法错误或访问冲突:ticket.id'不在 GROUP BY 中(SQL:select *,
【发布时间】:2022-01-21 21:15:17
【问题描述】:
public function ScopeDistance($query, $from_latitude, $from_longitude, $distance)
{
    $raw = DB::raw('ROUND ( ( 6371 * acos( cos( radians(' . $from_latitude . ') ) * cos( radians( lat ) ) * cos( radians( lng ) - radians(' . $from_longitude . ') ) + sin( radians(' . $from_latitude . ') ) * sin( radians( lat ) ) ) ) ) AS distance');
    return $query->select('*')->addSelect($raw)->orderBy('distance', 'ASC')->groupBy('distance')->having('distance', '<=', $distance);
}

我正在尝试从纬度和经度中找到最近的数据。我得到这个错误?解决方法错了吗?

       $userData = UserLocation::whereUserId(3)->first();
    $max_distance = 50;
    $nearByTickets = Ticket::with(['brand', 'appliance'])->distance($userData->lat, $userData->lng, $max_distance)->get();
    return success($nearByTickets, __('tickets neared to you is'));

【问题讨论】:

    标签: laravel database eloquent model


    【解决方案1】:

    Laravel 查询构建器使用 PDO 参数绑定来保护您的应用程序免受 SQL 注入攻击。无需清理作为绑定传递的字符串。

    所以您的代码需要更新如下。使用 php 数组作为 DB::raw 方法的第二个参数

        public function ScopeDistance($query, $from_latitude, $from_longitude, $distance)
        {
            return
                DB::select(DB::raw('Select ROUND ( ( 6371 
                * acos( cos( radians(:from_latitude1) ) 
                * cos( radians( lat ) ) 
                * cos( radians( lng ) - radians(:from_latitude2) )
                + sin( radians(:from_longitude) ) 
                * sin( radians( lat ) ) ) ) ) AS distance 
                From tickets
                group by distance 
                having distance <= :distance
                order by distance ASC', array(
                    'from_latitude1' => $from_latitude,
                    'from_latitude2' => $from_latitude,
                    'from_longitude' => $from_longitude,
                    'distance' => $distance
                )));
        }
    

    【讨论】:

    • 无效的参数号:混合命名参数和位置参数它给了我这个错误@MarvenSank
    • 我建议您在 DB::select 中使用完整的原始查询,包括 $distance 。检查更新的答案。
    • 语法错误或访问冲突:1064 您的 SQL 语法有错误;检查与您的 MariaDB 服务器版本相对应的手册,以获取正确的语法,以便在 'group by distance\n 具有 distance tickets'?
    • order by 应该在最后。
    • SQLSTATE[42000]:语法错误或访问冲突:1064 您的 SQL 语法有错误;检查与您的 MariaDB 服务器版本相对应的手册,以了解在“来自 tickets”附近使用的正确语法它仍然说 thisss
    猜你喜欢
    • 1970-01-01
    • 2018-09-25
    • 2019-02-10
    • 2017-04-16
    • 2023-04-01
    • 1970-01-01
    • 1970-01-01
    • 2017-07-31
    • 2017-10-29
    相关资源
    最近更新 更多