Symfony - No insertar campos null en Symfony 3

   
Vista:

No insertar campos null en Symfony 3

Publicado por Patri (6 intervenciones) el 21/07/2017 11:21:58
Hola a tod@s!

He realizado un formulario en symfony que funciona perfectamente si relleno todos los campos, pero si alguno de ellos lo dejo vacio me da un error cuando va a insertar a la base de datos porque no puede insertar campos null.

Los campos de esta tabla estan configurados como Nulo=no

Si yo realizo un INSERT, desde la consola, indicando los campos que estan rellenados, los inserta correctamente.

Alguien sabe como puedo hacer en symfony, para que sólo me inserte en la tabla aquellos datos que se han introducido?

Muchas gracias por adelantado.

Un saludo.
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder

No insertar campos null en Symfony 3

Publicado por Fernando (16 intervenciones) el 28/07/2017 14:01:39
Hola Patri,

Cuando creas el formulario tienes que tener la opción required a false en el campo del formulario, asi no te obligara a introducir algun valor en ese campo.

Te pongo un ejemplo para que lo entiendas:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
class EntryType extends AbstractType {
 
    /**
     * {@inheritdoc}
     */
    public function buildForm(FormBuilderInterface $builder, array $options) {
        $builder
                  ->add('image', FileType::class, array(
                    'label' => "Imagen:",
                    'attr' => array("class" => "form-control"),
                    'data_class' => null,
                    'required' => false  //AQUI LO AÑADES
                ))
                ->add('Guardar', SubmitType::class, array(
                    "attr" => array("class" => "form-submit btn btn-success",
            )))
        ;
    }
}

Un saludo.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

No insertar campos null en Symfony 3

Publicado por Patry (6 intervenciones) el 31/07/2017 21:08:23
Hola Fernando,
Gracias por tu contestación, pero no es eso lo que necesito.

Por ejemplo vamos a suponer una tabla clientes que contiene los campos id_cliente, nombre completo, dirección y foto.
Todos los campos en la base de datos están como Nulo=no.
Puede ocurrir que no todos los clientes tienen foto, y es aquí donde viene el problema, si yo relleno los campos id_cliente, nombre completo y dirección pero dejo vacio el campo foto, al insertar y ejecutar Doctrine la sentencia me inserta también el campo foto, y como va vacío da el siguiente error: SQLSTATE[23000]: Integrity constraint violation: 1048 Column 'foto' cannot be null

Entonces lo que quiero es que sólo inserte aquellos campos que han sido rellenados.
Espero haberme explicado mejor.

Un saludo.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

No insertar campos null en Symfony 3

Publicado por Yamil Bracho (1 intervención) el 31/07/2017 21:52:17
En ese caso se ejecuta el constraint de NOT NULL, tendrias que colocar un valor por defecto a los campos para que te deje pasar el registro.
Puedes hacer quizas en el construct de la entidad
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

No insertar campos null en Symfony 3

Publicado por Patry (6 intervenciones) el 01/08/2017 18:22:57
Hola Yamil!
Gracias por contestar.

No quiero colocar un valor por defecto, quiero que inserte aquellos campos que hayan sido rellenados.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

No insertar campos null en Symfony 3

Publicado por Fernando (16 intervenciones) el 01/08/2017 08:49:03
Hola Patri,

Para hacerlo asi, lo puedes hacer definiendo que te acepte nulos en la base de datos con la opcion nullable igual a true en el yml del doctrine.
Te pongo un ejemplo:

imagen:
type: string
nullable: true
length: 250
options:
fixed: false

Luego añades el comando para actualizar las entidades:

php bin/console doctrine:generate:entities NombreTuBundle

Y luego actualizas la base de datos:

php bin/console doctrine:schema:update --force

Con eso te tiene que aceptar nulos en la base de datos. Si no es asi, pasame tu archivo yml donde has puesto la base de datos.

Saludos,

Fernando
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

No insertar campos null en Symfony 3

Publicado por Patry (6 intervenciones) el 01/08/2017 18:38:15
He cambiado el nullable=true
1
2
3
4
5
6
/**
     * @var string
     *
     * @ORM\Column(name="foto", type="blob", length=16777215, nullable=true)
     */
    private $foto;

He realizado
1
php bin/console doctrine:generate:entities NombreTuBundle

Pero cuando ejecuto
1
php bin/console doctrine:schema:update --force
me da error en una tabla que no tiene primary key, pero que no puedo modificar porque es de una base de datos ya existente.

Sigue sin solucionarse el problema del error SQLSTATE[23000]: Integrity constraint violation: 1048 Column 'foto' cannot be null

mi config.yml tiene la siguiente configuración:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
imports:
    - { resource: parameters.yml }
    - { resource: security.yml }
    - { resource: services.yml }
 
# Put parameters here that don't need to change on each machine where the app is deployed
# https://symfony.com/doc/current/best_practices/configuration.html#application-related-configuration
parameters:
    locale: en
 
framework:
    #esi: ~
    translator: { fallbacks: ['%locale%'] }
    secret: '%secret%'
    router:
        resource: '%kernel.project_dir%/app/config/routing.yml'
        strict_requirements: ~
    form: ~
    csrf_protection: ~
    validation: { enable_annotations: true }
    #serializer: { enable_annotations: true }
    templating:
        engines: ['twig']
    default_locale: '%locale%'
    trusted_hosts: ~
    session:
        # https://symfony.com/doc/current/reference/configuration/framework.html#handler-id
        handler_id: session.handler.native_file
        save_path: '%kernel.project_dir%/var/sessions/%kernel.environment%'
    fragments: ~
    http_method_override: true
    assets: ~
    php_errors:
        log: true
 
# Twig Configuration
twig:
    debug: '%kernel.debug%'
    strict_variables: '%kernel.debug%'
 
# Doctrine Configuration
doctrine:
    dbal:
        driver: pdo_mysql
        host: '%database_host%'
        port: '%database_port%'
        dbname: '%database_name%'
        user: '%database_user%'
        password: '%database_password%'
        charset: UTF8
        # if using pdo_sqlite as your database driver:
        #   1. add the path in parameters.yml
        #     e.g. database_path: "%kernel.project_dir%/var/data/data.sqlite"
        #   2. Uncomment database_path in parameters.yml.dist
        #   3. Uncomment next line:
        #path: '%database_path%'
 
    orm:
        auto_generate_proxy_classes: '%kernel.debug%'
        naming_strategy: doctrine.orm.naming_strategy.underscore
        auto_mapping: true
 
# Swiftmailer Configuration
swiftmailer:
    transport: '%mailer_transport%'
    host: '%mailer_host%'
    username: '%mailer_user%'
    password: '%mailer_password%'
    spool: { type: memory }
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

No insertar campos null en Symfony 3

Publicado por Fernando (16 intervenciones) el 02/08/2017 08:52:28
Hola Patry,

Si te da el error debe ser por que debes tener algun fallo en alguna en otra parte, por eso te sigue sin aceptarte nulos.
¿Puedes mostrar el archivo entero donde has creado la tabla?

Saludos,

Fernando.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

No insertar campos null en Symfony 3

Publicado por Patry (6 intervenciones) el 02/08/2017 09:52:02
Es una base de datos que ya esta creada y que se esta utilizando, por eso no es fallo de la creación.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

No insertar campos null en Symfony 3

Publicado por Fernando (16 intervenciones) el 02/08/2017 10:13:21
Prueba a borrarla con y a volver a crearla:
Para borrarla:
php bin/console doctrine:schema:drop --force

Para crear la base de datos y crear las tablas:

php bin/console doctrine:schema:create
php bin/console doctrine:schema:update --force

No te olvides de importar los datos primero, si quieres conservarlos.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

No insertar campos null en Symfony 3

Publicado por Patry (6 intervenciones) el 02/08/2017 10:21:58
No puedo es una base de datos que se esta utilizando.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
Revisar política de publicidad