Store.php 1.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657
  1. <?php
  2. namespace app\frontend\modules\coupon\models;
  3. class Store extends \app\common\models\Store
  4. {
  5. public function city()
  6. {
  7. return $this->hasOne('app\common\models\Address', 'id', 'city_id')->select(['id', 'areaname']);
  8. }
  9. public function district()
  10. {
  11. return $this->hasOne('app\common\models\Address', 'id', 'district_id')->select(['id', 'areaname']);
  12. }
  13. /**
  14. * 获取门店
  15. * @param array $storeIds
  16. * @param $lat
  17. * @param $lng
  18. * @return mixed
  19. */
  20. public function getStoreList (array $storeIds = [], $lat, $lng)
  21. {
  22. $store_mo = $this->uniacid();
  23. $store_mo->selectRaw('store_name, city_id, district_id, street_id, address, thumb, id');
  24. $store_mo->when(($lat && $lng), function ($query) use ($lat, $lng) {
  25. $query->selectRaw(
  26. "(round(6367000 * 2 * asin(sqrt(pow(sin(((latitude * pi()) / 180 - ({$lat} * pi()) / 180) / 2), 2) + cos(({$lat} * pi()) / 180) * cos((latitude * pi()) / 180) * pow(sin(((longitude * pi()) / 180 - ({$lng} * pi()) / 180) / 2), 2))))) AS distance"
  27. )->orderBy('distance', 'asc');
  28. });
  29. if($storeIds == null){ //全门店 只展示10条
  30. $store_list = $store_mo->limit(10)->get();
  31. }else{
  32. $store_mo = $store_mo->whereIn('id', $storeIds);
  33. $store_list = $store_mo->paginate(16,[],'store_page');
  34. }
  35. foreach ($store_list as &$store) {
  36. $store->thumb = yz_tomedia($store->thumb);
  37. $store->address = $store->city->areaname.$store->district->areaname.$store->street->areaname.$store->address;
  38. if($lat && $lng){
  39. $store->unit = 'm';
  40. if ($store->distance >= 1000) {
  41. $store->distance = round($store->distance / 1000, 1);
  42. $store->unit = 'km';
  43. }
  44. }
  45. }
  46. return $store_list;
  47. }
  48. }