सबसे पहले, static
को हटाना न भूलें फ़ंक्शन कॉल से कीवर्ड, Laravel जादुई स्थिर-दिखने . से संबंधित है Profile::distance
कॉल करें।
एक ही समस्या को हल करने के लिए नीचे 2 अलग-अलग विकल्प दिए गए हैं, किसी भी स्थिति में आप \App\Profile::distance($latitude, $longitude, 50)
पर कॉल करेंगे। आपके नियंत्रक से।
विकल्प 1
आप उपश्रेणियों से निपटने के बजाय स्मृति में गणना कर सकते हैं।
public function scopeDistance($query, $lat, $long, $distance) {
return Profile::all()->filter(function ($profile) use ($lat, $long, $distance) {
$actual = 3959 * acos(
cos(deg2rad($lat)) * cos(deg2rad($profile->latitude))
* cos(deg2rad($profile->longitude) - deg2rad($long))
+ sin(deg2rad($lat)) * sin(deg2rad($profile->latitude))
);
return $distance < $actual;
});
}
विकल्प 2
आप एक SQL सबक्वेरी निष्पादित कर सकते हैं, कॉल को get()
with के साथ समाप्त करना सुनिश्चित करें :
public function scopeDistance($query, $lat, $long, $distance) {
return $query->having('distance', '<', $distance)
->select(DB::raw("*,
(3959 * ACOS(COS(RADIANS($lat))
* COS(RADIANS(latitude))
* COS(RADIANS($long) - RADIANS(longitude))
+ SIN(RADIANS($lat))
* SIN(RADIANS(latitude)))) AS distance")
)->orderBy('distance', 'asc')
->get();
}