Address.php 3.0 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192939495969798
  1. <?php
  2. namespace app\common\model;
  3. use think\Model;
  4. use traits\model\SoftDelete;
  5. /**
  6. * 模型
  7. */
  8. class Address extends Model
  9. {
  10. use SoftDelete;
  11. // 表名
  12. protected $name = 'shop_address';
  13. // 开启自动写入时间戳字段
  14. protected $autoWriteTimestamp = 'int';
  15. // 定义时间戳字段名
  16. protected $createTime = 'createtime';
  17. protected $updateTime = 'updatetime';
  18. protected $deleteTime = 'deletetime';
  19. // 追加属性
  20. protected $append = [];
  21. public static function init()
  22. {
  23. parent::init();
  24. self::beforeWrite(function ($row) {
  25. $changed = $row->getChangedData();
  26. if (isset($changed['isdefault']) && $changed['isdefault']) {
  27. $info = \addons\shop\model\Address::where('isdefault', 1)->where('user_id', $row['user_id'])->find();
  28. if ($info && (!isset($row['id']) || $info['id'] != $row['id'])) {
  29. $info->isdefault = 0;
  30. $info->save();
  31. }
  32. }
  33. $row['address'] = $row->address_full;
  34. });
  35. }
  36. public function getAddressBaseAttr($value, $data)
  37. {
  38. $areainfo = $this->getAreainfoAttr($value, $data);
  39. $province = $areainfo['province'] ? $areainfo['province']['name'] : '';
  40. $city = $areainfo['city'] ? $areainfo['city']['name'] : '';
  41. $area = $areainfo['area'] ? $areainfo['area']['name'] : '';
  42. $value = $data['address'];
  43. $value = preg_replace("/^{$province}{$city}{$area}/", "", $value);
  44. return $value;
  45. }
  46. public function getAddressFullAttr($value, $data)
  47. {
  48. $areainfo = $this->getAreainfoAttr($value, $data);
  49. $province = $areainfo['province'] ? $areainfo['province']['name'] : '';
  50. $city = $areainfo['city'] ? $areainfo['city']['name'] : '';
  51. $area = $areainfo['area'] ? $areainfo['area']['name'] : '';
  52. $value = $data['address'];
  53. $value = preg_replace("/^{$province}{$city}{$area}/", "", $value);
  54. $value = $province . $city . $area . $value;
  55. return $value;
  56. }
  57. /**
  58. * 获取城市和地区信息
  59. * @param $value
  60. * @param $data
  61. * @return array
  62. */
  63. public function getAreainfoAttr($value, $data)
  64. {
  65. $result = [
  66. 'province' => null,
  67. 'city' => null,
  68. 'area' => null,
  69. ];
  70. $areaList = Area::where('id', 'in', [$data['province_id'], $data['city_id'], $data['area_id']])->select();
  71. foreach ($areaList as $index => $item) {
  72. $levelName = ($item['level'] == 1 ? 'province' : ($item['level'] == 2 ? 'city' : 'area'));
  73. $result[$levelName] = $item;
  74. }
  75. return $result;
  76. }
  77. /**
  78. * 获取会员地址列表
  79. * @param $user_id
  80. * @return false|\PDOStatement|string|\think\Collection
  81. */
  82. public static function getAddressList($user_id)
  83. {
  84. $addressList = self::where('user_id', $user_id)->where('status', 'normal')->order('usednums desc,id desc')->select();
  85. return $addressList;
  86. }
  87. }