我有一些表store_section
(id
,parent_id
,label
),我想更改某些行,设置parent_id = null。
我试图:
$record = $table->getTable()->find( $id );
$record->parent_id = null;
$record->save();
但这不起作用。如何在Doctrine中的表中设置NULL,例如上面的例子,parent_id变为= 0(不是= NULL)?
回复的Thnx!
答案 0 :(得分:12)
我会尝试以下其中一项:
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();
我没有对这些进行过测试,但我确实记得之前有类似的问题,只是不记得我是如何解决它的。希望这有帮助!
答案 1 :(得分:5)
你可以使用方法集('u.name','NULL') 例如:
Doctrine_Query::create()->update('User u')->set('u.name', 'NULL')->where('u.id = ?',$id);
答案 2 :(得分:2)
Doctrine_Null
只有两种方法,而似乎与之相关的方法是__toString
方法。因此,为了激活魔术方法,您需要将其转换为字符串:
$record = $table->getTable()->find( $id );
$record->parent_id = (string) new Doctrine_Null;
$record->save();
但老实说没有理由,因为Doctrine_Null
只是抽象出一个空字符串''
。我只能假设它只适用于这种情况,因为parent_id没有强制执行NULL
属性。
设置'NULL'的值可以正常工作,但实际上是一个字符串,而不是NULL。
'NULL' !== null
试一试,如果你将'NULL'插入一行,而另一行是“自然空”,你将两行拉出表并在每一行上做var_dump(serialize())
,你会看一个是自然的null而另一个实际上是一个字符串。
如果要保持一致性并强制使用自然空值,请改用:
$record = $table->getTable()->find( $id );
$record->parent_id = new Doctrine_Expression('NULL');
$record->save();
答案 3 :(得分:1)
在这种情况下,当字段是关系时。我完成了这项任务:
$record->Parent = null;
$record->save();
在Parent之上是关系名称。
答案 4 :(得分:0)
$record->setParentId(null);
$record->save();
答案 5 :(得分:0)
在Doctrine2中,您还可以使用查询生成器直接更新数据库中的值。
$qb = // $this->connection->createQueryBuilder(); or $this->em->createQueryBuilder();
$qb->update('store_section', 's')
->set('s.parent_id', ':parent_id')
->andWhere('s.id', ':id'));
$qb->setParameter('parent_id', null);
$qb->setParameter('id', $id);
$qb->execute();