user()->addresses()->latest('id')->get(); return AddressResource::collection($addresses); } /** * 创建地址 * * @param \Illuminate\Http\Request $request * @return \Illuminate\Http\JsonResponse */ public function store(Request $request) { $input = $request->validate([ 'consignee' => ['bail', 'required', 'string', 'max:150'], 'telephone' => ['bail', 'required', new PhoneNumber()], 'province' => ['bail', 'required', 'string', 'max:255'], 'city' => ['bail', 'required', 'string', 'max:255'], 'district' => ['bail', 'required', 'string', 'max:255'], 'address' => ['bail', 'required', 'string', 'max:255'], 'is_default' => ['bail', 'required', 'boolean'], ]); $user = $request->user(); $address = $user->addresses()->create($input); // 如果当前地址变为默认地址,则将其它地址设为非默认地址 if ($address->is_default) { $user->addresses()->where('id', '!=', $address->id)->update([ 'is_default' => false, ]); } return AddressResource::make($address); } /** * 查看地址 * * @param int $id * @param \Illuminate\Http\Request $request * @return \Illuminate\Http\JsonResponse */ public function show($id, Request $request) { $address = $request->user()->addresses()->findOrFail($id); return AddressResource::make($address); } /** * 修改地址 * * @param int $id * @param \Illuminate\Http\Request $request * @return \Illuminate\Http\JsonResponse */ public function update($id, Request $request) { $input = $request->validate([ 'consignee' => ['bail', 'required', 'string', 'max:150'], 'telephone' => ['bail', 'required', new PhoneNumber()], 'province' => ['bail', 'required', 'string', 'max:255'], 'city' => ['bail', 'required', 'string', 'max:255'], 'district' => ['bail', 'required', 'string', 'max:255'], 'address' => ['bail', 'required', 'string', 'max:255'], 'is_default' => ['bail', 'required', 'boolean'], ]); $user = $request->user(); $address = $user->addresses()->findOrFail($id); $address->update($input); // 如果当前地址变更为默认地址,则将其它地址设为非默认地址 if ($address->wasChanged('is_default') && $address->is_default) { $user->addresses()->where('id', '!=', $address->id)->update([ 'is_default' => false, ]); } return AddressResource::make($address); } /** * 删除地址 * * @param int $id * @param \Illuminate\Http\Request $request * @return \Illuminate\Http\Response */ public function destroy($id, Request $request) { $request->user()->addresses()->where('id', $id)->delete(); return response()->noContent(); } }