DB:选择Laravel 5如何将查询结果传递给我的帖子

时间:2019-03-05 20:59:02

标签: php mysql laravel

我有2个表,用户和帖子,其中用户具有坐标(user_latitude / user_longitude),帖子具有坐标(address_latitude / address_longitude)。

我设法通过下面的函数来显示结果数组,但是我想做的是提取临时字段“距离”并将其与我的帖子相关联,因此在我看来,我可以显示类似以下内容:

@foreach($posts as $post)
<p>Distance from you: {{$post->distance}}</p>
...

在此方面的一些帮助将不胜感激。

public function distance(){
    $lat = Auth::user()->user_latitude;
    $lng = Auth::user()->user_longitude;
    $radius = 10;

    $data = DB::select('SELECT id, title, ( 6371 * acos( cos( radians('.$lat.') ) * cos( radians( address_latitude ) ) * cos( radians( address_longitude ) - radians('.$lng.') ) + sin( radians('.$lat.') ) * sin( radians( address_latitude ) ) ) ) AS distance FROM posts HAVING distance < '.$radius.';');

    return $data;
}

2 个答案:

答案 0 :(得分:2)

使用Raw Expressions

For s = LBound(sheetArray) To UBound(sheetArray)
        With sheetArray(s)
            With .Rows(7).SpecialCells(XlCellType.xlCellTypeConstants, xlTextValues)
                Set f = .Find(what:="Total", LookIn:=xlValues, lookat:=xlWhole)
                If Not f Is Nothing Then
                    firstAddress = f.Offset(, 1).Address 
                    Do
                        f.EntireColumn.Insert
                        Set f = .FindNext(f)
                    Loop While f.Address <> firstAddress
                End If
            End With
        End With
    Next s

'The above works.

    For s = 1 To UBound(sheetArray)
        With sheetArray(s)
            For i = 8 To 21
                Set criteriaDept = sheetArray(s).Cells("B7")
                Set criteriaSite = sheetArray(s).Cells(i, 3)
                Set criteriaTherapy = sheetArray(s).Cells("C6")
                    sheetArray.Cells(i, [[HERE]]) = SumIf(sumIfRange, cSiteRange, criteriaSite,       
                        cDeptRange, criteriaDept, cTherapyRange, criteriaTherapy)
            Next i
        End With
    Next s

现在,如果您想在视图中使用它,请按以下步骤使用foreach

public function my_function()
{
    $lat = Auth::user()->user_latitude;
    $lng = Auth::user()->user_longitude;
    $radius = 10;

    $data = DB::table('posts')
        ->select('id', 'title', DB::raw('( 6371 * acos( cos( radians('.$lat.') ) * cos( radians( address_latitude ) ) * cos( radians( address_longitude ) - radians('.$lng.') ) + sin( radians('.$lat.') ) * sin( radians( address_latitude ) ) ) ) AS distance'))
        ->having('distance', '<', $radius)
        ->get();

    return view('posts.later', ['posts' => $data]);
}

答案 1 :(得分:1)

尝试:

public function distance() {

    $lat = Auth::user()->user_latitude;
    $lng = Auth::user()->user_longitude;
    $radius = 10;

    $data = DB::select('SELECT id, title, ( 6371 * acos( cos( radians('.$lat.') ) * cos( radians( address_latitude ) ) * cos( radians( address_longitude ) - radians('.$lng.') ) + sin( radians('.$lat.') ) * sin( radians( address_latitude ) ) ) ) AS distance FROM posts HAVING distance < '.$radius.';');

    return $data->get();

}