From fad042253440509d9130bdaf37adf8fb676e6b7c Mon Sep 17 00:00:00 2001 From: Edward Yang Date: Wed, 27 Jul 2022 11:06:16 +0800 Subject: [PATCH] update region --- .../Http/Controllers/RegionController.php | 17 ++++--- beike/Admin/Repositories/RegionRepo.php | 44 +++++++++++++++++++ beike/Models/Region.php | 9 ++++ beike/Models/RegionZone.php | 27 ++++++++++++ 4 files changed, 92 insertions(+), 5 deletions(-) create mode 100644 beike/Admin/Repositories/RegionRepo.php create mode 100644 beike/Models/RegionZone.php diff --git a/beike/Admin/Http/Controllers/RegionController.php b/beike/Admin/Http/Controllers/RegionController.php index 43098f46..aebeb0fe 100644 --- a/beike/Admin/Http/Controllers/RegionController.php +++ b/beike/Admin/Http/Controllers/RegionController.php @@ -14,13 +14,14 @@ namespace Beike\Admin\Http\Controllers; use Beike\Models\Region; use Illuminate\Http\Request; use Beike\Repositories\CountryRepo; +use Beike\Admin\Repositories\RegionRepo; class RegionController { public function index() { $data = [ - 'regions' => Region::query()->with('zones')->get(), + 'regions' => Region::query()->with('regionZones.zone')->get(), 'countries' => CountryRepo::all() ]; @@ -29,16 +30,22 @@ class RegionController public function store(Request $request) { - return json_success('添加成功'); + $requestData = json_decode($request->getContent(), true); + $region = RegionRepo::createOrUpdate($requestData); + return json_success('保存成功', $region); } - public function update(Request $request) + public function update(Request $request, int $regionId) { - return json_success('更新成功'); + $requestData = json_decode($request->getContent(), true); + $requestData['id'] = $regionId; + $region = RegionRepo::createOrUpdate($requestData); + return json_success('更新成功', $region); } - public function destroy(Request $request) + public function destroy(Request $request, int $regionId) { + RegionRepo::deleteById($regionId); return json_success('删除成功'); } } diff --git a/beike/Admin/Repositories/RegionRepo.php b/beike/Admin/Repositories/RegionRepo.php new file mode 100644 index 00000000..87198240 --- /dev/null +++ b/beike/Admin/Repositories/RegionRepo.php @@ -0,0 +1,44 @@ + + * @created 2022-07-27 10:48:25 + * @modified 2022-07-27 10:48:25 + */ + +namespace Beike\Admin\Repositories; + +use Beike\Models\Region; + +class RegionRepo +{ + public static function createOrUpdate($data) + { + $id = $data['id'] ?? 0; + if ($id) { + $region = Region::query()->findOrFail($id); + } else { + $region = new Region(); + } + $region->fill([ + 'name' => $data['title'], + 'description' => $data['description'], + ]); + $region->saveOrFail(); + + $region->regionZones()->delete(); + $region->regionZones()->createMany($data['region_zones']); + $region->load(['regionZones']); + return $region; + } + + public static function deleteById($id) + { + $region = Region::query()->findOrFail($id); + $region->regionZones()->delete(); + $region->delete(); + } +} diff --git a/beike/Models/Region.php b/beike/Models/Region.php index 8d71aa09..8c4c3cbc 100644 --- a/beike/Models/Region.php +++ b/beike/Models/Region.php @@ -11,12 +11,21 @@ namespace Beike\Models; +use Illuminate\Database\Eloquent\Relations\HasMany; use Illuminate\Database\Eloquent\Relations\BelongsToMany; class Region extends Base { + protected $fillable = ['name', 'description']; + public function zones(): BelongsToMany { return $this->belongsToMany(Zone::class, 'region_zones'); } + + + public function regionZones(): HasMany + { + return $this->hasMany(RegionZone::class); + } } diff --git a/beike/Models/RegionZone.php b/beike/Models/RegionZone.php new file mode 100644 index 00000000..9595d1ca --- /dev/null +++ b/beike/Models/RegionZone.php @@ -0,0 +1,27 @@ + + * @created 2022-07-27 11:01:01 + * @modified 2022-07-27 11:01:01 + */ + +namespace Beike\Models; + +class RegionZone extends Base +{ + protected $fillable = ['region_id', 'country_id', 'zone_id']; + + public function country() + { + return $this->belongsTo(Country::class); + } + + public function zone() + { + return $this->belongsTo(Zone::class); + } +}