繁体   English   中英

将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

现在我已经连接用户和列表表实际上我正在寻找里程但我想用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();

现在我有Core 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。 提前致谢 :)

当您的查询要复杂时,请在L​​aravel中尝试RAW查询,如:

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

参考

注意:这些表达式将作为字符串注入到查询中,因此请注意不要创建任何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();

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM