2010-09-17 16 views
10

ho qualche tavolo store_section (id, parent_id, label), voglio cambiare qualche riga, impostare parent_id = null.come posso fare impostare NULL nella tabella in Dottrina

I cercando di:

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

Ma questo non è il lavoro. Come posso impostare NULL nella tabella in Doctrine, nell'esempio sopra, parent_id diventa = 0 (not = NULL)?

Thnx per le risposte!

+0

La vostra definizione della tabella specificare 0 come valore predefinito per 'parent_id'? – BenV

+0

No, valore predefinito = null NULL – ajile

risposta

12

proverei una delle seguenti operazioni:

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(); 

non ho testato questi, ma ricordo avendo un problema simile nota, non riesco a ricordare come l'ho risolto. Spero che questo ti aiuti!

+2

nuovo Doctrine_Null() funziona in Doctrine 1.2. – Tom

+1

Ftr, "NULL"! == NULL. La tua seconda soluzione inserisce effettivamente la stringa NULL. –

1

in questo caso, quando il campo è una relazione. Ho completato questo compito con:

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

Sopra il genitore è il nome della relazione.

5

È possibile utilizzare metodo set ('u.name', 'NULL') Ad esempio:

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

Dovresti aggiornare la tua risposta invece di postarne una nuova. – j0k

2

Doctrine_Null ha solo due metodi, e quello che sembra riferirsi rappresenta l'__toString metodo. Quindi, al fine di attivare il metodo magico è necessario lanciare come una stringa:

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

Ma onestamente non c'è ragione, come Doctrine_Null solo astrae una stringa vuota ''. Posso solo supporre che funzioni solo in questo scenario perché parent_id non sta applicando un attributo NULL.

Impostare un valore di 'NULL' appare per funzionare ma in realtà è una stringa e non NULL.

'NULL' !== null 

Dare un colpo, se si inserisce 'NULL' in una riga, e un'altra riga è un "NULL naturale", e si tira entrambe le righe fuori dal tavolo e fare un var_dump(serialize()) su ciascuno, si vuole vedere uno è un null naturale e l'altro è in realtà una stringa.

Se si vuole mantenere la coerenza e far rispettare i valori nulli naturali, utilizzare questo invece:

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

Dove tutte le soluzioni di cui sopra non funzionano in Doctrine 1.2, 'new Doctrine_Expression ('NULL')' sembra funzionare abbastanza bene in realtà. Grazie per aver salvato la mia giornata. – TwystO

Problemi correlati