[英]How to get distance from latitude and longitude from mysql Address table which have latitude and longitude
$distance = DB::select(
DB::raw("
SELECT a.distance
FROM ( SELECT user_id, street, store_name,
(
'".$mean_radius_of_Earth."' *
acos(cos(radians('".$latitude."')) *
cos(radians(latitude)) *
cos(radians(longitude) -
radians('".$longitude."')) +
sin(radians('".$latitude."')) *
sin(radians(latitude)))
) AS distance
FROM addresses ) AS a
WHERE id= '". $address_id."'
")
);
我必須使用此address_id作為主鍵來獲取特定行的所有列,但出現錯誤:-未找到列:1054“ where子句”中的未知列“ id”,但是當我嘗試實現這一點時與user_id然后我得到所有字段數據,user_id(不是primary_key),您的幫助將不勝感激, 在此先感謝,並感謝英語不正確
您沒有在子請求中選擇ID,因此,或者在子查詢中進行選擇,或者在子選擇中選擇字段ID:
$distance = DB::select(
DB::raw("
SELECT a.distance
FROM ( SELECT user_id, street, store_name,
(
'".$mean_radius_of_Earth."' *
acos(cos(radians('".$latitude."')) *
cos(radians(latitude)) *
cos(radians(longitude) -
radians('".$longitude."')) +
sin(radians('".$latitude."')) *
sin(radians(latitude)))
) AS distance
FROM addresses
WHERE id= '". $address_id."') AS a
")
);
在這種情況下,我將利用Eloquent的Appends功能的強大功能。
在您的情況下,它可能看起來像以下內容,
<?php
namespace App;
use Illuminate\Database\Eloquent\Model;
class User extends Model
{
/**
* The accessors to append to the model's array form.
*
* @var array
*/
protected $appends = ['distance'];
/**
* Get the distance for the user.
*
* @return int
*/
public function getDistanceAttribute()
{
$distance = // Crazy math for distance insert here
// To get address long and lat stored in separate database
// I would eager load them in the query call and then in this
// function you'd already have the values ready to go in memory
$distance = $this->address->long...
return $distance;
}
}
該解決方案的優點在於,您可以利用Eloquent的查詢,防止SQL注入混亂,並使事物與模型(而不是查詢)相關聯。
use App\User;
foreach(User::all() as $user) {
echo $user->distance; // Print's out the distance you wanted
}
echo User::where('id', '=', $address_id)->first()->distance; // Prints out specific user's distance.
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.