• Jobs
  • About Us
  • professionals
    • Home
    • Jobs
    • Courses and challenges
  • business
    • Home
    • Post vacancy
    • Our process
    • Pricing
    • Assessments
    • Payroll
    • Blog
    • Sales
    • Salary Calculator

0

243
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 3 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 3 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 3 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 3 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 Our process Sales
Legal
Terms and conditions Privacy policy
© 2025 PeakU Inc. All Rights Reserved.

Andres GPT

Recommend me some offers
I have an error