where(['user_id'=>$user_id]) ->field('id,contact,telephone,province_id,city_id,district_id,address,is_default,post_code') ->select(); foreach ($info as &$item) { $item['province'] = self::getAddress($item['province_id']); $item['city'] = self::getAddress($item['city_id']); $item['district'] = self::getAddress($item['district_id']); } return $info; } /** * 获取默认地址 * @param $user_id */ public static function getDefaultAddress($user_id){ $info = Db::name('user_address') ->where(['is_default'=>1,'user_id'=>$user_id]) ->field('id,contact,telephone,province_id,city_id,district_id,address,is_default,post_code') ->find(); if (!$info){ return []; } $info['province'] = self::getAddress($info['province_id']); $info['city'] = self::getAddress($info['city_id']); $info['district'] = self::getAddress($info['district_id']); return $info; } /** * 设置默认地址 * @param $user_id * @param $post * @return int|string */ public static function setDefaultAddress($user_id,$post){ Db::startTrans(); try { Db::name('user_address') ->where(['user_id'=>$user_id]) ->update(['is_default'=>0]); $result = Db::name('user_address') ->where(['id'=>$post['id'],'user_id'=>$user_id]) ->update(['is_default'=>1]); Db::commit(); } catch (Exception $e) { Db::rollback(); return false; } return $result; } /** * 添加收货地址 * @param $user_id * @param $post * @return int|string */ public static function addUserAddress($user_id,$post) { Db::startTrans(); try { if ($post['is_default'] == 1){ Db::name('user_address') ->where(['user_id'=>$user_id]) ->update(['is_default'=>0]); }else{ $is_first = Db::name('user_address') ->where(['user_id'=>$user_id]) ->select(); if (empty($is_first)){ $post['is_default'] = 1; } } $data = [ 'user_id' => $user_id, 'contact' => $post['contact'], 'telephone' => $post['telephone'], 'province_id' => $post['province_id'], 'city_id' => $post['city_id'], 'district_id' => $post['district_id'], 'address' => $post['address'], 'is_default' => $post['is_default'], 'post_code' => $post['post_code'], 'create_time' => time() ]; $result = Db::name('user_address')->insert($data); Db::commit(); } catch (Exception $e) { Db::rollback(); return false; } return $result; } /** * 编辑用户地址 * @param $user_id * @param $post */ public static function editUserAddress($user_id,$post) { Db::startTrans(); try { if ($post['is_default'] == 1){ Db::name('user_address') ->where(['user_id'=>$user_id]) ->update(['is_default'=>0]); } $data = [ 'contact' => $post['contact'], 'telephone' => $post['telephone'], 'province_id' => $post['province_id'], 'city_id' => $post['city_id'], 'district_id' => $post['district_id'], 'address' => $post['address'], 'is_default' => $post['is_default'], 'post_code' => $post['post_code'], 'update_time' => time() ]; $result = Db::name('user_address') ->where(['id'=>$post['id'],'user_id'=>$user_id]) ->update($data); Db::commit(); } catch (Exception $e) { Db::rollback(); return false; } return $result; } /** * 删除用户地址 * @param $user_id * @param $post */ public static function delUserAddress($user_id,$post) { return Db::name('user_address')->where(['id'=>$post['id'],'user_id'=>$user_id])->delete(); } /** * Desc: 获取用户指定id的地址 * @param $address * @param $user_id */ public static function getUserAddressById($address, $user_id) { $info = Db::name('user_address') ->where(['id' => $address, 'user_id' => $user_id]) ->field('id,contact,telephone,province_id,city_id,district_id,address,is_default,post_code') ->find(); if (!$info) { return []; } $info['province'] = self::getAddress($info['province_id']); $info['city'] = self::getAddress($info['city_id']); $info['district'] = self::getAddress($info['district_id']); return $info; } //获取订单用户地址 /** * Desc: 获取下单时用户地址 * @param $data * @param $user_id */ public static function getOrderUserAddress($data, $user_id) { if (isset($data['address_id']) && $data['address_id'] != 0){ return self::getUserAddressById($data['address_id'], $user_id); } return self::getDefaultAddress($user_id); } /** * 通过id获取地址 * @param $val(为非数组,返回单独地点名,为数组时,按顺序拼接地址返回) * @param string $address val为数组时,连接详细地址一起返回 * @return mixed|string */ public static function getAddress($val, $address = '') { $area_id_name = Db::name('dev_region')->column('name', 'id'); if (!is_array($val)) { return isset($area_id_name[$val]) ? $area_id_name[$val] : ''; } $long_address = ''; foreach ($val as $id) { $long_address .= isset($area_id_name[$id]) ? $area_id_name[$id] : ''; } return $long_address . $address; } }