2010-09-17 8 views
10

Ich habe einige Tabelle store_section (id, parent_id, label), Ich möchte eine Zeile ändern, legen Sie Parent_ID = null.Wie kann ich NULL in die Tabelle in Doctrine setzen

Ich versuche zu:

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

Aber das funktioniert nicht. Wie kann ich NULL in die Tabelle in Doctrine setzen, in obigem Beispiel wird parent_id = 0 (nicht = NULL)?

Thnx für die Antworten!

+0

Gibt es in Ihrer Tabellendefinition 0 als Standardwert für 'parent_id' angeben? – BenV

+0

Nein, Wert standardmäßig = null NULL – ajile

Antwort

12

Ich würde eine der folgenden Möglichkeiten versuchen:

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

ich diese nicht getestet, aber ich erinnere mich vor ein ähnliches Problem hat, kann mich einfach nicht erinnern, wie ich es gelöst habe. Hoffe das hilft!

+2

new Doctrine_Null() funktioniert in Doctrine 1.2. – Tom

+1

Ftr, "NULL"! == NULL. Ihre zweite Lösung fügt die Zeichenfolge NULL tatsächlich ein. –

1

in diesem Fall, wenn das Feld eine Beziehung ist. Ich habe diese Aufgabe mit durchgeführt:

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

Oberhalb Parent ist die Beziehung Name.

5

Sie Methode Set verwenden können ('u.name', 'NULL') Zum Beispiel:

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

Sie sollten Ihre Antwort besser aktualisieren, anstatt eine neue zu schreiben. – j0k

2

Doctrine_Null hat nur zwei Methoden, und derjenige, der die __toString zu beziehen scheint Methode. Also, um die magische Methode, die Sie als String werfen müssen zu aktivieren:

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

Aber ehrlich gesagt gibt es keinen Grund, wie Doctrine_Null nur '' eine leere Zeichenfolge abstrahiert. Ich kann nur annehmen, dass es nur in diesem Szenario funktioniert, da parent_id kein NULL Attribut erzwingt.

Setzen Sie einen Wert von 'NULL' erscheint zu arbeiten, ist aber eigentlich eine Zeichenfolge und nicht NULL.

'NULL' !== null 

ihm einen Schuss geben, wenn Sie ‚NULL‘ in eine Zeile einzufügen, und eine andere Zeile ist ein „natürliches NULL“, und ziehen Sie die beiden Zeilen aus der Tabelle und macht ein var_dump(serialize()) auf jedem, werden Sie eins ist ein natürliches Null und anderes ist eigentlich ein String.

Wenn Sie Konsistenz beibehalten wollen und natürlichen nulls zu erzwingen, diese stattdessen verwenden:

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

Wo alle oben genannten Lösungen in Docutrine 1.2 fehlschlagen, scheint 'new Doctrine_Expression ('NULL')' ziemlich gut zu funktionieren. Danke, dass du meinen Tag gerettet hast. – TwystO

Verwandte Themen