繁体   English   中英

Laravel:Mysql查询到Eloquent

[英]Laravel: Mysql Query to Eloquent

如何以Eloquent形式编写下面的查询? 此查询会根据搜索字词为我提供广告,然后对该数据进行排序以显示最近的位置。 $latitude$longitude将是GET参数。 我的表关系是LIKE ,其中tbl_people表与tbl_ads表和位置相关。 查询工作正常,现在我需要以雄辩的形式查询。

SELECT
  tbl_ads.Title,
  tbl_ads.Description,
  tbl_ads.Sub_Category_Id,
  tbl_ads.Image,
  tbl_ads.Date_Time,
  tbl_ads.Main_Category_Id,
  tbl_ads.People_Id,
  tbl_location.Address,
  ROUND((
    6371 * ACOS(
      COS(RADIANS($latitude)) * COS(RADIANS(tbl_location.Latitude)) * COS(
        RADIANS(tbl_location.Longitude) - RADIANS($longitude)
      ) + SIN(RADIANS($latitude)) * SIN(RADIANS(tbl_location.Latitude))
    )
  ),2) AS DISTANCE
FROM
  tbl_ads
INNER JOIN
  tbl_people ON tbl_ads.People_Id = tbl_people.Id
INNER JOIN
  tbl_location ON tbl_people.Location_ID = tbl_location.Id
WHERE
  (
    tbl_ads.Title LIKE '%for%' OR tbl_ads.Description LIKE '%for%'
  )

到目前为止,我已按原始格式编写此查询,但不知道如何包含DISTANCE列。 顺便说一句,这个查询工作正常。

DB :: table('users') - > join('posts','users.id','=','posts.user_id') - > join('locations','users.id','=' ,'locations.id') - > select('posts.title','users.name','locations.address') - > get();

Laravel原始格式的MySQL查询:

DB::table('tbl_people')->join('tbl_ads', 'tbl_people.id', '=', 'tbl_ads.people_id')->join('tbl_location', 'tbl_people.id', '=', 'tbl_location.id')->select('tbl_ads.*
', 'tbl_people.*', 'tbl_location.address', DB::raw('ROUND((6371 * ACOS(COS(RADIANS(31.430443800000003)) * COS(RADIANS(tbl_location.lattitude)) * COS(RA
DIANS(tbl_location.longitude) - RADIANS(74.280726)) + SIN(RADIANS(31.430443800000003)) * SIN(RADIANS(tbl_location.lattitude)))),2) AS DISTANCE'))-
>where('tbl_ads.description','like','%for%')->orwhere('tbl_ads.title', 'like', '%for%')->get();

暂无
暂无

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

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