Laravel:Mysql 查询到 Eloquent

Posted

技术标签:

【中文标题】Laravel:Mysql 查询到 Eloquent【英文标题】:Laravel: Mysql Query to Eloquent 【发布时间】:2017-09-25 16:19:57 【问题描述】:

如何以 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('用户') ->join('posts', 'users.id', '=', 'posts.user_id') ->join('locations', 'users.id', '=', 'locations.id') ->select('posts.title', 'users.name', 'locations.address') ->get();

【问题讨论】:

需要使用模型方法还是直接使用DB::select()? 您可能必须将其作为原始查询。 两者都可以。 【参考方案1】:

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();

【讨论】:

以上是关于Laravel:Mysql 查询到 Eloquent的主要内容,如果未能解决你的问题,请参考以下文章

Laravel中的MySQL子查询,如何加入查询并将第二个查询的结果作为新列添加到第一个查询?

将 mysql 查询转换为 laravel 查询生成器

如何使用 Laravel 框架执行 MySQL 查询?

Laravel 模型与 POINT/POLYGON 等使用 DB::raw 表达式

将 MySQL 查询转换为 Laravel 查询构建器代码

Laravel统计Mysql 单个字段不同值的数量