es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

El campo de valor de Symfony EasyAdmin se considera nulo (y viola la restricción de no nulo).

Tengo un panel EasyAdmin para agregar productos en la base de datos.

Mi ProductCrudController se ve así:

<?php

namespace App\Controller\Admin;

use App\Entity\Product;
use EasyCorp\Bundle\EasyAdminBundle\Field\SlugField;
use EasyCorp\Bundle\EasyAdminBundle\Field\TextField;
use EasyCorp\Bundle\EasyAdminBundle\Field\ImageField;
use EasyCorp\Bundle\EasyAdminBundle\Field\MoneyField;
use EasyCorp\Bundle\EasyAdminBundle\Field\TextareaField;
use EasyCorp\Bundle\EasyAdminBundle\Controller\AbstractCrudController;
use EasyCorp\Bundle\EasyAdminBundle\Field\AssociationField;
use EasyCorp\Bundle\EasyAdminBundle\Field\BooleanField;

class ProductCrudController extends AbstractCrudController
{
    public static function getEntityFqcn(): string
    {
        return Product::class;
    }

    public function configureFields(string $pageName): iterable
    {
        return [
            TextField::new('name'),
            SlugField::new('slug')->setTargetFieldName('name'),
            ImageField::new('Illustration')
                ->setBasePath('images')
                ->setUploadDir('public/assets/images')
                ->setUploadedFileNamePattern('[randomhash].[extension]')
                ->setRequired('false'),
            TextField::new('subtitle'),
            TextareaField::new('description'),
            BooleanField::new('isBest'),
            MoneyField::new('price')->setCurrency('EUR'),
            AssociationField::new('category')

        ];
    }
}

Cuando intento agregar un producto, se guardan los valores de todos los campos, excepto para el campo “description”.

Obtengo el siguiente error:

An exception occurred while executing a query: SQLSTATE[23502]: Not null violation: 7 ERROR: null value in column "description" violates not-null constraint
DETAIL: Failing row contains (14, 5, TestName, testname, d4090e87b44852e9f570057216d86a7cc2e10164.jpg, testSubtitle, null, 3200, f).

No entiendo por qué los otros campos están funcionando y “description” no lo está.

Tags:  ,

Answer

  1. Avatar for davy.ai

    Basado en el mensaje de error que proporcionaste, parece que el campo “description” está definido como una columna de no nulos en la tabla de la base de datos. Esto significa que cuando intentas guardar un nuevo producto y dejas el campo “description” vacío, la base de datos muestra un error de violación de no nulos porque no puede aceptar un valor nulo para esa columna.

    Puedes intentar las siguientes soluciones:

    1. Actualiza el esquema de la base de datos para permitir valores nulos en la columna “description”. Puedes utilizar una herramienta de gestión de bases de datos como phpMyAdmin o ejecutar un comando de migración de base de datos para modificar el esquema.
    2. Añade un valor por defecto al campo “description” en el método configureFields() de tu controlador ProductCrud. Por ejemplo:

      TextareaField::new(‘description’)->setDefaultValue(‘No hay descripción disponible’),

    Esto proporcionará un valor por defecto para el campo “description” si se deja vacío durante el proceso de creación del producto.

    1. Haz que el campo “description” sea opcional en el proceso de validación de tu formulario de producto. Puedes actualizar las restricciones de validación en la clase de entidad Product para eliminar las restricciones NotBlank o NotNull del campo “description”. Por ejemplo:

      use Symfony\Component\Validator\Constraints as Assert;

      class Product
      {
      // …

      /**
       * @ORM\Column(type="text", nullable=true)
       *
       * @Assert\Length(max=500)
       */
      private $description;
      
      // ...
      

      }

    Esto permitirá que el campo “description” sea opcional y acepte valores nulos durante la creación o actualización del producto.

Comments are closed.