Мне нравятся удобные методы для запросов на манипулирование данными $ conn-> insert () и $ conn-> update () в DBAL доктрины 2, потому что значения insert / update могут быть переданы как ассоциативный массив. Но как я могу передать значение NULL, функцию MySQL или другие выражения в качестве значения?
Например:
/* $conn is a \Doctrine\DBAL\Connection object */
$conn->update('person', array('phone' => 'NULL'), array('id' => 1));
$conn->update('person', array('lastlogin' => 'NOW()'), array('id' => 1));
$conn->update('person', array('visit' => 'visit + 1'), array('id' => 1));
Эти вызовы функций будут создавать готовые операторы, такие как
UPDATE person SET phone = ? WHERE id = ?
и, таким образом, значения будут рассматриваться как строки.
Есть ли способ сделать эту работу, используя эту технику?
Есть необязательный $types
аргумент, который по умолчанию равен пустому массиву:
public function update($tableExpression, array $data, array $identifier, array $types = array())
$types
массив может содержать Константы типа PDO который изменит, как соответствующий $data
значения обрабатываются.
Итак, я бы попробовал:
$conn->update(
'person', // $tableExpression
array('phone' => null), // $data
array('id' => 1), // $identifier
array('phone' => \PDO::PARAM_NULL) // $types
);
Других решений пока нет …