diff --git a/app/Http/Controllers/Web/Produktivitas/PetaniLahanController.php b/app/Http/Controllers/Web/Produktivitas/PetaniLahanController.php index acb24e6..1a20417 100644 --- a/app/Http/Controllers/Web/Produktivitas/PetaniLahanController.php +++ b/app/Http/Controllers/Web/Produktivitas/PetaniLahanController.php @@ -7,6 +7,7 @@ use Illuminate\Http\Request; use Illuminate\Support\Facades\Gate; use Illuminate\Support\Facades\Validator; use Illuminate\Support\Facades\DB; +use Illuminate\Support\Facades\Schema; use Illuminate\Support\Facades\Storage; use Illuminate\Support\Str; use Illuminate\Validation\Rules\Enum; @@ -101,6 +102,12 @@ class PetaniLahanController extends Controller return []; } + private function hasPestDiseaseColumns(string $table): bool + { + return Schema::hasColumn($table, 'jenis_hama') + && Schema::hasColumn($table, 'jenis_penyakit'); + } + private function validateLahan(Request $request) { return $request->validate([ @@ -200,7 +207,14 @@ class PetaniLahanController extends Controller ]); $validated = $this->validateLahan($request); - $validated = array_merge($validated, $this->autoPestDiseaseData($petaniId)); + $autoPestDiseaseData = $this->autoPestDiseaseData($petaniId); + $lahanHasPestDiseaseColumns = $this->hasPestDiseaseColumns((new Lahan)->getTable()); + $tanamanHasPestDiseaseColumns = $this->hasPestDiseaseColumns((new Tanaman)->getTable()); + + if ($lahanHasPestDiseaseColumns) { + $validated = array_merge($validated, $autoPestDiseaseData); + } + $komoditas = Komoditas::where('id', $request->komoditas_id)->first(); $lahanCount = Lahan::where('petani_id', $petaniId) ->count(); @@ -230,8 +244,8 @@ class PetaniLahanController extends Controller ); if ($lahan && $lahan->jumlah_tanaman > 0) { - $data = collect(range(1, $lahan->jumlah_tanaman))->map(function ($i) use ($lahan, $komoditas, $lahanUid) { - return [ + $data = collect(range(1, $lahan->jumlah_tanaman))->map(function ($i) use ($lahan, $komoditas, $lahanUid, $autoPestDiseaseData, $tanamanHasPestDiseaseColumns) { + $row = [ 'lahan_id' => $lahan->id, 'uid' => 'TNM-' . $lahanUid . '-' . strtoupper(Str::random(10)), 'komoditas_id' => $lahan->komoditas_id, @@ -244,13 +258,18 @@ class PetaniLahanController extends Controller 'serangan_hama' => $lahan->serangan_hama, 'penyakit_tanaman' => $lahan->penyakit_tanaman, 'keparahan_serangan' => $lahan->keparahan_serangan, - 'jenis_hama' => json_encode($lahan->jenis_hama ?? []), - 'jenis_penyakit' => json_encode($lahan->jenis_penyakit ?? []), 'created_by' => auth()->id(), 'updated_by' => auth()->id(), 'created_at' => now(), 'updated_at' => now(), ]; + + if ($tanamanHasPestDiseaseColumns) { + $row['jenis_hama'] = json_encode($autoPestDiseaseData['jenis_hama'] ?? []); + $row['jenis_penyakit'] = json_encode($autoPestDiseaseData['jenis_penyakit'] ?? []); + } + + return $row; }); $data->chunk(500)->each(function ($chunk) { @@ -329,7 +348,14 @@ class PetaniLahanController extends Controller ->toArray() ]); $validated = $this->validateLahan($request); - $validated = array_merge($validated, $this->autoPestDiseaseData($petaniId)); + $autoPestDiseaseData = $this->autoPestDiseaseData($petaniId); + $lahanHasPestDiseaseColumns = $this->hasPestDiseaseColumns((new Lahan)->getTable()); + $tanamanHasPestDiseaseColumns = $this->hasPestDiseaseColumns((new Tanaman)->getTable()); + + if ($lahanHasPestDiseaseColumns) { + $validated = array_merge($validated, $autoPestDiseaseData); + } + $komoditas = Komoditas::where('id', $request->komoditas_id)->first(); $tanamanCount = Tanaman::where('lahan_id', $lahan->id)->count(); $lahanCount = Lahan::where('petani_id', $petaniId)->count(); @@ -382,8 +408,8 @@ class PetaniLahanController extends Controller $this->syncTanamanPenaung($request); if ($lahan && $lahan->jumlah_tanaman > $tanamanCount) { - $data = collect(range($tanamanCount + 1, $lahan->jumlah_tanaman))->map(function ($i) use ($lahan, $komoditas, $lahanUid) { - return [ + $data = collect(range($tanamanCount + 1, $lahan->jumlah_tanaman))->map(function ($i) use ($lahan, $komoditas, $lahanUid, $autoPestDiseaseData, $tanamanHasPestDiseaseColumns) { + $row = [ 'lahan_id' => $lahan->id, 'komoditas_id' => $lahan->komoditas_id, 'jenis_komoditas_id' => $lahan->jenis_komoditas_id, @@ -396,13 +422,18 @@ class PetaniLahanController extends Controller 'serangan_hama' => $lahan->serangan_hama, 'penyakit_tanaman' => $lahan->penyakit_tanaman, 'keparahan_serangan' => $lahan->keparahan_serangan, - 'jenis_hama' => json_encode($lahan->jenis_hama ?? []), - 'jenis_penyakit' => json_encode($lahan->jenis_penyakit ?? []), 'created_by' => auth()->id(), 'updated_by' => auth()->id(), 'created_at' => now(), 'updated_at' => now(), ]; + + if ($tanamanHasPestDiseaseColumns) { + $row['jenis_hama'] = json_encode($autoPestDiseaseData['jenis_hama'] ?? []); + $row['jenis_penyakit'] = json_encode($autoPestDiseaseData['jenis_penyakit'] ?? []); + } + + return $row; }); $data->chunk(500)->each(function ($chunk) { @@ -410,11 +441,13 @@ class PetaniLahanController extends Controller }); } - $lahan->tanaman()->update([ - 'jenis_hama' => json_encode($lahan->jenis_hama ?? []), - 'jenis_penyakit' => json_encode($lahan->jenis_penyakit ?? []), - 'updated_by' => auth()->id(), - ]); + if ($tanamanHasPestDiseaseColumns) { + $lahan->tanaman()->update([ + 'jenis_hama' => json_encode($autoPestDiseaseData['jenis_hama'] ?? []), + 'jenis_penyakit' => json_encode($autoPestDiseaseData['jenis_penyakit'] ?? []), + 'updated_by' => auth()->id(), + ]); + } if ($request->ajax()) { return response()->json([ diff --git a/app/Models/Pertanian/PraktikBudidaya.php b/app/Models/Pertanian/PraktikBudidaya.php index 97454eb..bc466c7 100644 --- a/app/Models/Pertanian/PraktikBudidaya.php +++ b/app/Models/Pertanian/PraktikBudidaya.php @@ -8,6 +8,7 @@ use Illuminate\Database\Eloquent\Factories\HasFactory; use Illuminate\Database\Eloquent\Relations\BelongsTo; use Illuminate\Database\Eloquent\Relations\HasMany; use Illuminate\Database\Eloquent\Relations\HasOne; +use Illuminate\Support\Facades\Schema; use Illuminate\Support\Str; use App\Models\Pertanian\Petani; @@ -100,21 +101,27 @@ class PraktikBudidaya extends Model $jenisHama = $praktikBudidaya->jenis_hama ?? []; $jenisPenyakit = $praktikBudidaya->jenis_penyakit ?? []; - Lahan::where('petani_id', $praktikBudidaya->petani_id)->get()->each(function (Lahan $lahan) use ($jenisHama, $jenisPenyakit, $praktikBudidaya) { - $lahan->update([ - 'jenis_hama' => $jenisHama, - 'jenis_penyakit' => $jenisPenyakit, - 'updated_by' => $praktikBudidaya->updated_by, - ]); - }); + if (Schema::hasColumn((new Lahan)->getTable(), 'jenis_hama') + && Schema::hasColumn((new Lahan)->getTable(), 'jenis_penyakit')) { + Lahan::where('petani_id', $praktikBudidaya->petani_id)->get()->each(function (Lahan $lahan) use ($jenisHama, $jenisPenyakit, $praktikBudidaya) { + $lahan->update([ + 'jenis_hama' => $jenisHama, + 'jenis_penyakit' => $jenisPenyakit, + 'updated_by' => $praktikBudidaya->updated_by, + ]); + }); + } - Tanaman::where('petani_id', $praktikBudidaya->petani_id)->get()->each(function (Tanaman $tanaman) use ($jenisHama, $jenisPenyakit, $praktikBudidaya) { - $tanaman->update([ - 'jenis_hama' => $jenisHama, - 'jenis_penyakit' => $jenisPenyakit, - 'updated_by' => $praktikBudidaya->updated_by, - ]); - }); + if (Schema::hasColumn((new Tanaman)->getTable(), 'jenis_hama') + && Schema::hasColumn((new Tanaman)->getTable(), 'jenis_penyakit')) { + Tanaman::where('petani_id', $praktikBudidaya->petani_id)->get()->each(function (Tanaman $tanaman) use ($jenisHama, $jenisPenyakit, $praktikBudidaya) { + $tanaman->update([ + 'jenis_hama' => $jenisHama, + 'jenis_penyakit' => $jenisPenyakit, + 'updated_by' => $praktikBudidaya->updated_by, + ]); + }); + } if ($kebiasaan == 0) { $skor_konservasi_tanah = 1; diff --git a/database/migrations/2026_07_22_110145_update_lahan_tanaman_table.php b/database/migrations/2026_07_22_110145_update_lahan_tanaman_table.php index c3f4a9e..6fde87c 100644 --- a/database/migrations/2026_07_22_110145_update_lahan_tanaman_table.php +++ b/database/migrations/2026_07_22_110145_update_lahan_tanaman_table.php @@ -12,26 +12,46 @@ return new class extends Migration public function up(): void { Schema::table('map_lahan', function (Blueprint $table) { - $table->jsonb('jenis_hama')->nullable(); - $table->jsonb('jenis_penyakit')->nullable(); + if (! Schema::hasColumn('map_lahan', 'jenis_hama')) { + $table->jsonb('jenis_hama')->nullable(); + } + + if (! Schema::hasColumn('map_lahan', 'jenis_penyakit')) { + $table->jsonb('jenis_penyakit')->nullable(); + } }); Schema::table('map_tanaman', function (Blueprint $table) { - $table->jsonb('jenis_hama')->nullable(); - $table->jsonb('jenis_penyakit')->nullable(); + if (! Schema::hasColumn('map_tanaman', 'jenis_hama')) { + $table->jsonb('jenis_hama')->nullable(); + } + + if (! Schema::hasColumn('map_tanaman', 'jenis_penyakit')) { + $table->jsonb('jenis_penyakit')->nullable(); + } }); } public function down(): void { Schema::table('map_lahan', function (Blueprint $table) { - $table->dropColumn('jenis_hama'); - $table->dropColumn('jenis_penyakit'); + if (Schema::hasColumn('map_lahan', 'jenis_hama')) { + $table->dropColumn('jenis_hama'); + } + + if (Schema::hasColumn('map_lahan', 'jenis_penyakit')) { + $table->dropColumn('jenis_penyakit'); + } }); Schema::table('map_tanaman', function (Blueprint $table) { - $table->dropColumn('jenis_hama'); - $table->dropColumn('jenis_penyakit'); + if (Schema::hasColumn('map_tanaman', 'jenis_hama')) { + $table->dropColumn('jenis_hama'); + } + + if (Schema::hasColumn('map_tanaman', 'jenis_penyakit')) { + $table->dropColumn('jenis_penyakit'); + } }); } };