将 sql 查询转换为 laravel5.2?

convert sql query in to laravel5.2?

我正在搜索里程。我已经在核心 sql 查询中完成了英里搜索,但我想将其转换为 laravel 查询。谁能帮我 :- 这是我的数据库结构

Users table

id name
1  abc
2   def

Listings Table

id user_id  name   latitude    longitude
1   1      test    30.9193     75.8309
2   2      new     30.9177     75.8415

现在我已经加入了用户和列表 table 实际上我正在做里程搜索但是我想用 laravel 查询来实现 这是我的 laravel 查询:-

$users = DB::table('users')
        ->join('listings','users.id','=','listings.user_id')
        ->select('users.id','users.service_name','listings.id as listid','listings.latitude','listings.longitude')
        ->get();

现在我有了核心 sql 查询,但我想结合上面的查询:-

enter code here
$sql = SELECT *, ( 3959 * acos ( cos ( radians(30.9193) ) * cos( radians( 
lat ) ) * cos( radians( lng ) - radians(75.8309) ) + sin ( radians(30.9193) 
) * sin( radians( lat ) ) ) ) AS distance FROM listings HAVING distance < 

76 任何人都可以帮助我如何添加上面的 laravel 查询。提前致谢:)

如果您的查询过于复杂,请尝试在 Laravel 中进行 RAW 查询,例如:

$data = DB::select(DB::raw('Your SQL query'));

Reference

注意:这些表达式将作为字符串注入到查询中,因此请注意不要创建任何 SQL 个注入点

试试 whereRaw

$nearby = Listings::whereRaw("(
                                        3959 
                                        *DEGREES(ACOS(COS(RADIANS('30.9193'))
                                        * COS(RADIANS(lat))
                                        * COS(RADIANS('75.8309' - lng))+ SIN (RADIANS('30.9193'))         
                                        * SIN(RADIANS(lat))))<=5)"
                                        )->paginate(50);

你的情况

$users = DB::table('users')
        ->join('listings','users.id','=','listings.user_id')
        ->select('users.id','users.service_name','listings.id as listid','listings.latitude','listings.longitude')
        ->whereRaw("(
                                            3959 
                                            *DEGREES(ACOS(COS(RADIANS('30.9193'))
                                            * COS(RADIANS(listings.latitude))
                                            * COS(RADIANS('75.8309' - listings.longitude))+ SIN (RADIANS('30.9193'))         
                                            * SIN(RADIANS(listings.longitude))))<=76)"
                                            )
        ->get();