diff --git a/app/Http/Controllers/Api/RegionController.php b/app/Http/Controllers/Api/RegionController.php index aa27475..61c882c 100644 --- a/app/Http/Controllers/Api/RegionController.php +++ b/app/Http/Controllers/Api/RegionController.php @@ -5,7 +5,8 @@ namespace App\Http\Controllers\Api; use App\Http\Controllers\Controller; use Illuminate\Http\Request; use App\Models\{Region, RegionCategory}; -use App\Http\Resources\{RegionResource, RegionCategoryResource}; +use App\Http\Resources\{RegionResource, RegionCategoryResource, RegionPlantResource, PlantHarvestResource}; +use App\Filters\Admin\RegionFilter; class RegionController extends Controller { @@ -18,10 +19,33 @@ class RegionController extends Controller public function index(Request $request) { - $query = Region::query()->sort()->show(); + $query = Region::with(['currentPlant'])->filter($request->all(), RegionFilter::class)->sort()->show(); $list = $query->paginate($request->input('per_page')); return $this->json(RegionResource::collection($list)); } + + public function show($id) + { + $info = Region::with(['currentPlant'])->show()->findOrFail($id); + + return $this->json(RegionResource::make($info)); + } + + public function plants($id) + { + $info = Region::show()->findOrFail($id); + $list = $info->plants()->get(); + + return $this->json(RegionPlantResource::collection($list)); + } + + public function harvests($id) + { + $info = Region::show()->findOrFail($id); + $list = $info->harvests()->get(); + + return $this->json(PlantHarvestResource::collection($list)); + } } diff --git a/app/Http/Resources/PlantHarvestResource.php b/app/Http/Resources/PlantHarvestResource.php new file mode 100644 index 0000000..88cbaa2 --- /dev/null +++ b/app/Http/Resources/PlantHarvestResource.php @@ -0,0 +1,27 @@ + $this->id, + 'plant_id' => $this->plant_id, + 'region_id' => $this->region_id, + 'director' => $this->director, + 'area' => $this->area, + 'output' => $this->output, + 'harvest_at' => $this->harvest_at ? $this->harvest_at->timestamp : '', + ]; + } +} diff --git a/app/Http/Resources/RegionPlantResource.php b/app/Http/Resources/RegionPlantResource.php new file mode 100644 index 0000000..9ec2393 --- /dev/null +++ b/app/Http/Resources/RegionPlantResource.php @@ -0,0 +1,27 @@ + $this->id, + 'plant_name' => $this->plant_name, + 'director' => $this->director, + 'area' => $this->area, + 'start_at' => $this->start_at ? $this->start_at->timestamp : '', + 'end_at' => $this->end_at ? $this->end_at->timestamp : '', + 'plant_state' => $this->plant_state, + ]; + } +} diff --git a/app/Http/Resources/RegionResource.php b/app/Http/Resources/RegionResource.php index 0fbd93a..4f79e8f 100644 --- a/app/Http/Resources/RegionResource.php +++ b/app/Http/Resources/RegionResource.php @@ -23,6 +23,7 @@ class RegionResource extends JsonResource 'description' => $this->description, 'category_id' => $this->category_id, 'category' => RegionCategoryResource::make($this->whenLoaded('category')), + 'current_plant' => RegionPlantResource::make($this->whenLoaded('currentPlant')), ]; } } diff --git a/app/Models/Region.php b/app/Models/Region.php index 668207c..7101f1b 100644 --- a/app/Models/Region.php +++ b/app/Models/Region.php @@ -53,15 +53,21 @@ class Region extends Model // 种植记录 public function plants() { - return $this->hasMany(RegionPlantLog::class, 'region_id'); + return $this->hasMany(RegionPlantLog::class, 'region_id')->orderBy('start_at', 'desc'); + } + + // 当前种植 + public function currentPlant() + { + return $this->hasOne(RegionPlantLog::class, 'region_id')->orderBy('start_at', 'desc'); } // 收货记录 - public function harvest() + public function harvests() { - return $this->hasMany(PlantHarvestLog::class, 'region_id'); + return $this->hasMany(PlantHarvestLog::class, 'region_id')->orderBy('harvest_at', 'desc'); } - + public static function regionTabConfig($region = null){ $tabs = [ [ diff --git a/app/Models/RegionPlantLog.php b/app/Models/RegionPlantLog.php index 0e5036b..089b6e9 100644 --- a/app/Models/RegionPlantLog.php +++ b/app/Models/RegionPlantLog.php @@ -6,6 +6,9 @@ use EloquentFilter\Filterable; use Illuminate\Database\Eloquent\Casts\Attribute; use Illuminate\Database\Eloquent\Model; +/** + * 种植记录 + */ class RegionPlantLog extends Model { use Filterable; @@ -25,7 +28,9 @@ class RegionPlantLog extends Model ); } - public function harvestes(){ + // 收获记录 + public function harvestes() + { return $this->hasMany(PlantHarvestLog::class, 'plant_id'); } } diff --git a/routes/api.php b/routes/api.php index 45a342f..c58e131 100644 --- a/routes/api.php +++ b/routes/api.php @@ -27,3 +27,6 @@ Route::get('article/{id}', [ArticleController::class, 'show']); Route::get('region/category', [RegionController::class, 'category']); Route::get('region', [RegionController::class, 'index']); +Route::get('region/{id}', [RegionController::class, 'show']); +Route::get('region/{id}/plants', [RegionController::class, 'plants']); +Route::get('region/{id}/harvests', [RegionController::class, 'harvests']);