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子查询,如何加入查询并将第二个查询的结果作为新列添加到第一个查询?