我有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;
}
答案 0 :(得分:2)
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();
}