2010-09-17 7 views
10

Bazı tabloları store_section (id, parent_id, label) var, bir satır değiştirmek istiyorum, parent_id = null.Doctrine'deki tabloya NULL nasıl ayarlayabilirim?

Çalışmaya çalışıyorum:

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

Fakat bu işe yaramıyor. Doctrine'deki tabloya NULL değerini nasıl ayarlayabilirim, örneğin yukarıdaki gibi, parent_id = 0 olur (= NULL değil)?

Yanıtlar için Thnx!

+0

tablo tanımı 'parent_id' için varsayılan değer olarak 0 belirtiyor? – BenV

+0

Hayır, varsayılan değer = null NULL – ajile

cevap

12

şunlardan birini denemek istiyorum

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

Bunları test etmedim ama önce benzer bir sorun olan hatırlıyorsun, Sadece nasıl çözdüğümü hatırlayamıyorum. Bu yardımcı olur umarım!

+2

doctrine 1.2 içinde yeni Doctrine_Null() çalışır. – Tom

+1

Ftr, "NULL"! == NULL. 2. çözümünüz aslında NULL dizesini ekler. –

1

. Bu görevi şu görevle tamamladım: Yukarıdaki adın ilişki adıdır.

1:

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

2:

5
Sen yöntem kümesi Örneğin ('u.name', 'BOŞ') kullanabilirsiniz

:

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

Yeni bir tane göndermek yerine cevabınızı daha iyi bir şekilde güncellemeniz gerekir. – j0k

2

Doctrine_Null sadece iki yöntemleri ve ilişkili gibi görünmektedir birine sahiptir __toString olduğunu yöntem. Yani bir dize olarak döküm gereken sihirli yöntemini etkinleştirmek için:

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

Ama Doctrine_Null sadece boş bir dize '' soyutlar olarak dürüstçe, hiçbir neden yoktur. Yalnızca bu senaryoda çalıştığını varsayalım, çünkü parent_id bir NULL özniteliğini zorlamıyor.

'NULL' değerini ayarlamak,'un çalıştığı görünmektedir, ancak aslında bir dizedir ve NULL değil. Eğer bir satıra 'NULL' eklerseniz

'NULL' !== null 

, bir atış ver ve başka bir satır "doğal NULL" olduğunu ve masanın dışına hem satırları çekin ve her bir var_dump(serialize()) yapmak, olur Birincisi doğal bir boş ve diğeri aslında bir dizedir. Eğer tutarlılığı korumak ve doğal boş değerlere uygulamak istiyorsanız

yerine bunu kullanın:

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

Yukarıdaki tüm çözümler Doctrine 1.2'de başarısız olduğunda, yeni Doctrine_Expression ('NULL') 'aslında oldukça iyi görünüyor. Günümü kurtardığın için teşekkürler. – TwystO