如何在Doctrine中的表中设置NULL

时间:2010-09-17 11:53:04

标签: php doctrine

我有一些表store_sectionidparent_idlabel),我想更改某些行,设置parent_id = null。

我试图:

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

但这不起作用。如何在Doctrine中的表中设置NULL,例如上面的例子,parent_id变为= 0(不是= NULL)?

回复的Thnx!

6 个答案:

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