
[img]https: //i.sstatic.net/w87wrDY8.png[/img]

Я попытался изменить функцию редактирования и обновления в моем контроллере, чтобы получать информацию Json из таблицы sql
public function edit($id)
{
$publicService = publicservices::findOrFail($id);
return view('publicServices.edit', compact('publicService'));
}
public function update(Request $request, $id)
{
$request->validate([
'tipoServicio' => 'required|array',
'proveedor' => 'required|array',
'costo' => 'required|array',
'nombrepropietario' => 'required|array',
'descripcion' => 'required|array',
'total' => 'required|numeric',
]);
$publicService = publicservices::findOrFail($id);
//here we collect the data and turned back into json
$services = [];
foreach ($request->tipoServicio as $service => $value) {
if ($value) { // Solo agregar servicios seleccionados
$services[$service] = [
'proveedor' => $request->proveedor[$service] ?? '',
'costo' => $request->costo[$service] ?? 0,
'nombrepropietario' => $request->nombrepropietario[$service] ?? '',
'descripcion' => $request->descripcion[$service] ?? '',
];
}
}
$publicService->servicios = json_encode($services);
$publicService->total = $request->total;
//Here the changes are saved
$publicService->save();
// Redireccionamos al índice con un mensaje de éxito
return redirect()->route('publicServices.index')->with('success', 'Servicio Público actualizado correctamente');
}
затем пытается отобразить в edit.blade.php, но на предыдущем изображении показан результат этого
@extends('adminlte::page')
@section('title', 'Editar Servicio Público')
@section('content_header')
Editar Disponibilidad de Servicios Públicos
@stop
@section('content')
@csrf
@method('PUT')
{{-- Tabla para editar los servicios públicos --}}
Tipo de Servicio
✓
Proveedor
Costo
A nombre de Quien
Descripción
@php
$allServices = [
'Agua Potable', 'Electricidad', 'Alquiler', 'Cable Satelital',
'Internet', 'Celular', 'Alimentación', 'Prestamos', 'Otros',
'Cobro CANON', 'Avalúo ZMT'
];
// Decodificar el campo JSON de 'servicios' para obtener los valores actuales
$existingServices = json_decode($publicService->servicios, true);
@endphp
@foreach ($allServices as $service)
@php
// Cargamos los valores existentes del servicio o valores predeterminados
$selected = isset($existingServices[$service]);
$serviceData = $selected ? $existingServices[$service] : ['proveedor' => '', 'costo' => '', 'nombrepropietario' => '', 'descripcion' => ''];
@endphp
{{ $service }}
@endforeach
{{-- Total --}}
{{-- Botones --}}
Cancelar
@stop
@section('css')
{{-- no need of styles here --}}
@stop
@section('js')
// Función para habilitar o deshabilitar los campos según el checkbox
function toggleInputs(serviceName) {
const checkBox = document.querySelector(`input[name="tipoServicio[${serviceName}]"]`);
const hiddenInput = document.getElementById(`selectedService-${serviceName}`);
const fields = document.querySelectorAll(`input[name^="proveedor[${serviceName}]"], input[name^="costo[${serviceName}]"], input[name^="nombrepropietario[${serviceName}]"], input[name^="descripcion[${serviceName}]"]`);
fields.forEach(field => {
field.disabled = !checkBox.checked;
});
hiddenInput.value = checkBox.checked ? serviceName : '';
calculateTotal(); // Recalcular el total cuando se cambia el estado del checkbox
}
function calculateTotal() {
let total = 0;
const costFields = document.querySelectorAll('input[name^="costo["]');
costFields.forEach(field => {
if (!field.disabled && field.value) {
total += parseInt(field.value); // Convertir el valor a entero
}
});
document.getElementById('total').value = total;
}
@stop
Подробнее здесь: https://stackoverflow.com/questions/790 ... -blade-php
Мобильная версия