2010-09-17 10 views
10

Tengo alguna tabla store_section (id, parent_id, label), quiero cambiar alguna fila, establecer parent_id = null.¿Cómo puedo establecer NULL en la tabla en Doctrine

que intentar:

$record = $table->getTable()->find($id); 
$record->parent_id = null; 
$record->save(); 

Pero esto no es un trabajo. ¿Cómo puedo establecer NULL en la tabla en Doctrine, en el ejemplo anterior, parent_id becomes = 0 (not = NULL)?

Thnx para las respuestas!

+0

sí especifica que su definición de la tabla 0 como el valor por defecto para 'parent_id'? – BenV

+0

No, valor de forma predeterminada = nulo NULL – ajile

Respuesta

12

me gustaría probar uno de los siguientes:

1:

$record = $table->getTable()->find($id); 
$record->parent_id = new Doctrine_Null(); 
$record->save(); 

2:

$record = $table->getTable()->find($id); 
$record->parent_id = "NULL"; 
$record->save(); 

no he probado estos, pero sí recuerdo que tiene un problema similar antes, simplemente no puedo recordar cómo lo resolví. ¡Espero que esto ayude!

+2

nuevo Doctrine_Null() funciona en Doctrine 1.2. – Tom

+1

Ftr, "NULL"! == NULO. Su segunda solución realmente inserta la cadena NULL. –

1

en este caso, cuando el campo es una relación. He completado esta tarea con:

$record->Parent = null; 
$record->save(); 

Above Parent es el nombre de la relación.

5

Puede utilizar el método set ('u.name', 'NULL') Por ejemplo:

Doctrine_Query::create()->update('User u')->set('u.name', 'NULL')->where('u.id = ?',$id); 
0
$record->setParentId(null); 
$record->save(); 
+0

Debería actualizar su respuesta en lugar de publicar una nueva. – j0k

2

Doctrine_Null sólo tiene dos métodos, y la que parece estar relacionado es el __toString método. Así que con el fin de activar el método mágico, es necesario especificar como una cadena:

$record = $table->getTable()->find($id); 
$record->parent_id = (string) new Doctrine_Null; 
$record->save(); 

Pero honestamente no hay ninguna razón, como se acaba de Doctrine_Null abstrae una cadena vacía ''. Solo puedo suponer que solo funciona en este escenario porque parent_id no está aplicando un atributo NULL.

Establecer un valor de 'NULL' aparece a trabajar, pero en realidad es una cadena y no es NULL.

'NULL' !== null 

darle un tiro, si inserta 'NULL' en una fila, y otra fila es un "NULO natural", y que tire de ambas filas de la tabla y hacer un var_dump(serialize()) en cada uno, se quiere ver uno es un nulo natural y otro es en realidad una cadena.

Si desea mantener la coherencia y hacer cumplir los nulos naturales, utilizar esto en su lugar:

$record = $table->getTable()->find($id); 
$record->parent_id = new Doctrine_Expression('NULL'); 
$record->save(); 
+0

Donde todas las soluciones anteriores fallan en Doctrine 1.2, 'new Doctrine_Expression ('NULL')' parece funcionar bastante bien en realidad. Gracias por salvarme el día. – TwystO

Cuestiones relacionadas