繁体   English   中英

如何从具有经度和纬度的mysql地址表中获取经度和纬度的距​​离

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM