update region

This commit is contained in:
Edward Yang 2022-07-27 11:06:16 +08:00
parent 8a56d7cbdd
commit fad0422534
4 changed files with 92 additions and 5 deletions

View File

@ -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('删除成功');
}
}

View File

@ -0,0 +1,44 @@
<?php
/**
* RegionRepo.php
*
* @copyright 2022 opencart.cn - All Rights Reserved
* @link http://www.guangdawangluo.com
* @author Edward Yang <yangjin@opencart.cn>
* @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();
}
}

View File

@ -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);
}
}

View File

@ -0,0 +1,27 @@
<?php
/**
* RegionZone.php
*
* @copyright 2022 opencart.cn - All Rights Reserved
* @link http://www.guangdawangluo.com
* @author Edward Yang <yangjin@opencart.cn>
* @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);
}
}