2010-09-17 9 views
10

Mam pewną tabelę store_section (, parent_id, label), chcę zmienić niektóre wiersze, ustaw parent_id = null.Jak ustawić wartość NULL w tabeli w Doctrine

I próbuje:

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

Ale to nie działa. Jak mogę ustawić NULL w tabeli w Doctrine, w powyższym przykładzie, parent_id staje = 0 (not = NULL)?

Thnx za odpowiedzi!

+0

Czy twoja definicja tabeli podać 0 jako wartość domyślną dla 'parent_id'? – BenV

+0

Nie, wartość domyślnie = null NULL – ajile

Odpowiedz

12

chciałbym wypróbować jedną z następujących czynności:

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

Nie testowałem ich, ale ja pamiętam mające podobny problem przed, po prostu nie pamiętam, jak to rozwiązałem. Mam nadzieję że to pomoże!

+2

nowa Doctrine_Null() działa w Doctrine 1.2. – Tom

+1

Ftr, "NULL"! == NULL. Twoje drugie rozwiązanie faktycznie wstawia ciąg NULL. –

1

w tym przypadku, gdy pole jest relacją. Wykonałem to zadanie pod numerem:

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

Powyżej nazwy nadrzędnej to nazwa relacji.

5

Można użyć metody określonej ('u.name', 'NULL') Na przykład:

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

Powinieneś lepiej zaktualizować swoją odpowiedź, zamiast zamieszczać nową. – j0k

2

Doctrine_Null ma tylko dwa sposoby, a ten, który wydaje się odnosić jest __toString metoda. Tak więc w celu aktywacji magiczną metodę trzeba rzucać jako ciąg:

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

Ale szczerze mówiąc nie ma powodu, jak Doctrine_Null tylko abstrakty pusty ciąg ''. Mogę tylko założyć, że działa tylko w tym scenariuszu, ponieważ parent_id nie wymusza atrybutu NULL.

Ustawienie wartości "NULL" pojawia się do pracy, ale jest w rzeczywistości ciągiem, a nie NULL.

'NULL' !== null 

Daj mu szansę, jeśli włożysz „null” w jednym rzędzie, a drugi wiersz jest „naturalnym NULL”, i można wyciągnąć zarówno wiersze z tabeli i zrobić var_dump(serialize()) na siebie, będziesz patrz jeden jest naturalny zerowy, a inny jest w rzeczywistości ciągiem.

Jeśli chcesz zachować naturalne wartości null i egzekwować zgodność, użyj zamiast tego:

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

Tam, gdzie wszystkie powyższe rozwiązania zawodzą w Doctrine 1.2, "nowa funkcja Doctrine_Expression (" NULL ") wydaje się działać całkiem dobrze. Dziękuję za uratowanie mojego dnia. – TwystO

Powiązane problemy