Как сопоставить и декодировать таблицу json sql при редактировании в Blade.phpPhp

Кемеровские программисты php общаются здесь
Ответить
Anonymous
 Как сопоставить и декодировать таблицу json sql при редактировании в Blade.php

Сообщение Anonymous »

Мне нужно создать представление редактирования в Blade.php в laravel, которое может сопоставить информацию о выбранном элементе в таблице и позволить мне изменить ее. Всякий раз, когда я пытаюсь внести изменения, я могу отображать только таблицу, но не информация о выбранном элементе в представлении, информация sql хранится в формате json и должна отображаться с выбранными флажками, ранее отмеченными при сохранении информации.
Изображение

[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
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «Php»