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á.
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:
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.
use Symfony\Component\Validator\Constraints as Assert;
class Product
{
// …
}
Esto permitirá que el campo “description” sea opcional y acepte valores nulos durante la creación o actualización del producto.