यह मेरा कार्यान्वयन था। मैंने समय से पहले अपनी क्वेरी को अन्य नाम देना चुना है, इस तरह मैं Pagination
का लाभ उठा सकता हूं . इसके अलावा, आपको उन स्तंभों का स्पष्ट रूप से चयन करना होगा जिन्हें आप क्वेरी से पुनर्प्राप्त करना चाहते हैं। उन्हें ->select()
. पर जोड़ें . जैसे users.latitude, users.longitude, products.name
, या जो कुछ भी हो सकता है।
मैंने एक स्कोप बनाया है जो कुछ इस तरह दिखता है:
public function scopeIsWithinMaxDistance($query, $location, $radius = 25) {
$haversine = "(6371 * acos(cos(radians($location->latitude))
* cos(radians(model.latitude))
* cos(radians(model.longitude)
- radians($location->longitude))
+ sin(radians($location->latitude))
* sin(radians(model.latitude))))";
return $query
->select() //pick the columns you want here.
->selectRaw("{$haversine} AS distance")
->whereRaw("{$haversine} < ?", [$radius]);
}
आप इस दायरे को latitude
. वाले किसी भी मॉडल पर लागू कर सकते हैं औरlongitude
।
$location->latitude
को बदलें अपने latitude
. के साथ जिसके खिलाफ आप खोजना चाहते हैं, और $location->longitude
. को प्रतिस्थापित करना चाहते हैं उस देशांतर के साथ जिसे आप खोजना चाहते हैं।
model.latitude
को बदलें और model.longitude
उन मॉडलों के साथ जिन्हें आप $location
. के आसपास खोजना चाहते हैं $radius
. में परिभाषित दूरी के आधार पर ।
मुझे पता है कि आपके पास एक काम करने वाला हैवरसाइन फॉर्मूला है, लेकिन अगर आपको पेजिनेट करने की आवश्यकता है तो आप अपने द्वारा दिए गए कोड का उपयोग नहीं कर सकते।
उम्मीद है कि यह मदद करता है।