Как я могу установить NULL в таблицу в Doctrine? - PullRequest
10 голосов
/ 17 сентября 2010

У меня есть таблица store_section (id, parent_id, label), я хочу изменить строку, установить parent_id = null.

Я пытаюсь:

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

Но это не работа.Как я могу установить NULL в таблицу в Doctrine, в приведенном выше примере parent_id становится = 0 (не = NULL)?

Thnx для ответов!

Ответы [ 6 ]

12 голосов
/ 26 января 2011

Я бы попробовал одно из следующего:

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

Я не проверял их, но я помню, что имелпохожая проблема ранее, просто не могу вспомнить, как я ее решил.Надеюсь, это поможет!

5 голосов
/ 05 апреля 2012

Вы можете использовать набор методов ('u.name', 'NULL') Например:

Doctrine_Query::create()->update('User u')->set('u.name', 'NULL')->where('u.id = ?',$id);
2 голосов
/ 15 марта 2016

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' в одну строку, а другая строка будет "естественной NULL", вы вытащите обе строки из таблицы и сделаете var_dump(serialize()) для каждой, вы увидите является естественным нулем, а other на самом деле является строкой.

Если вы хотите поддерживать согласованность и применять естественные значения NULL, используйте вместо этого:

$record = $table->getTable()->find( $id );
$record->parent_id = new Doctrine_Expression('NULL');
$record->save();  
1 голос
/ 26 октября 2010

в этом случае, когда поле является отношением. Я выполнил эту задачу с:

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

Над родителем - имя отношения.

0 голосов
/ 07 марта 2019

В 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();
0 голосов
/ 12 июля 2012
$record->setParentId(null);
$record->save();
...