Business
Jobs
  • About Us
  • Solutions
    • Job Postings
      Post your job and receive qualified candidates in 48h.
    • Candidate Assessments
      500+ technical and psychological tests, plus anti-fraud.
    • Headhunting
      Tailor-made executive search from start to finish.
    • Payroll + EOR
      Payroll dispersal and EOR across 15+ LATAM countries.
  • Pricing
  • Jobs

0

290
Views
Establezca el campo booleano de entidad de doctrina en 0 en lugar de nulo

Estoy tratando de mantener una entidad de doctrina con un campo booleano donde los valores son 0 o 1.

Cuando la propiedad se establece en verdadero, la guarda como '1' en la base de datos. Pero cuando es 'falso' o '0', lo guarda como NULL en la base de datos.

¿Cómo puedo arreglar esto para guardar solo como 1 o 0?

La anotación para la propiedad que uso es la siguiente:

 @ORM\Column(name="substitute", type="boolean", nullable=true)

Cuando configuro anulable en falso, no puedo persistir porque todavía quiero establecerlo en nulo.

Gracias

Cuando lo persisto, el valor del campo es 0

Intento 1 @ORM\Column(name="substitute", type="boolean", options={"default":"0"}))

error: no se puede guardar nulo

Intento 2 @ORM\Column(name="substitute", type="boolean", nullable= true, options={"default":"0"}))

No funciona, todavía se guarda nulo en la base

Información 1

La consulta de inserción en realidad está tratando de insertar 0. Pero recibí este error "ORA-01400: no se puede insertar NULL en (\"MYBASE\".\"MYTABLE\".\"SUBSTITUTE\")"

Información 2

Mismo anexo con otra entidad

 class TestEntity { /** * @ORM\Column(name="test_entity_id", type="integer") * @ORM\Id * @ORM\GeneratedValue(strategy="AUTO") */ private $id; /** * @ORM\Column(name="substitute", type="boolean") */ private $isSubstitute = false; }

persistente

 $test = new TestEntity(); $test->setIsSubstitute(false); $em->persist($test);

Resultado

 request.CRITICAL: Uncaught PHP Exception Doctrine\DBAL\Exception\NotNullConstraintViolationException: "An exception occurred while executing 'INSERT INTO TestEntity (test_entity_id, substitute) VALUES (?, ?)' with params [7, 0]: SQLSTATE[HY000]: General error: 1400 OCIStmtExecute: ORA-01400: cannot insert NULL into ("MYBASE"."TESTENTITY"."SUBSTITUTE") (ext\pdo_oci\oci_statement.c:148)"\n (ext\\pdo_oci\\oci_statement.c:148) at PATH\\vendor\\doctrine\\dbal\\lib\\Doctrine\\DBAL\\Driver\\PDOStatement.php:91)"} []

Información 3

La inserción manual funciona con el controlador oci u oci8

 sql> INSERT INTO TestEntity (test_entity_id, substitute) VALUES (13, 0) [2017-04-06 11:21:15] 1 row affected in 62ms
over 4 years ago · Santiago Trujillo
3 answers
Answer question

0

Simplemente establezca el valor predeterminado de SQL en 0 ( Editar: debe actualizar el esquema después de ese cambio ):

 /** * @ORM\Column(type="boolean", options={"default":"0"}) */ protected $isActive;

También puede inicializar la propiedad de forma predeterminada:

 /** * @ORM\Column(type="boolean", options={"default":"0"}) */ protected $isActive = false;

Nullable no debería importar siempre que el valor se establezca en verdadero/falso.

Si realmente establece la propiedad en falso antes de guardar y aún la guarda como nula en la base de datos, entonces está sucediendo algo más.

over 4 years ago · Santiago Trujillo Report

0

Cambie su controlador de oci a oci8 en su archivo paramters.yml:

 database_driver: oci8

Deberias hacer eso. Use el Manual subterráneo de PHP y Oracle para instalar OCI8.

over 4 years ago · Santiago Trujillo Report

0

Creo que la sugerencia de @Cerad es correcta, puedes probar:

 /** * @ORM\Column(name="substitute", type="boolean") */ protected $substitute = false;

Dejanos saber el resultado.

over 4 years ago · Santiago Trujillo Report
Answer question
Find remote jobs

Discover the new way to find a job!

Top jobs
Top job categories
Business
Post vacancy Pricing Sales
Legal
Terms and conditions Privacy policy
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Show me some job opportunities
There's an error!