0

我将教义 DBAL 2.5.2 与 MySql 5.5 一起使用

我创建了一个带有timestamp类型和ON UPDATE CURRENT_TIMESTAMP额外内容的字段。

当我从 phpMyAdmin 更改内容时,该字段被更新并更改为当前时间戳,但是当我从 Doctrine/dbal 更新内容时,什么也没有发生。我的意思是除了on update.

我打电话给更新$app['db']->update('mytable', $data, array('my_id' => $id);

如何on update从教义/dbal 代码运行触发器?

编辑 :

我添加此代码以检查我是否尝试更改日期。

if (isset($data['updated'])) unset($data['updated']);
4

1 回答 1

1
  1. 确保您根本不发送该date字段,$data因为空字符串将导致零。
  2. 确保您实际上正在更改数据,否则时间戳列也不会更新。

我已经建立了一个测试项目,它工作正常:

$connectionParams = ...;
$conn = \Doctrine\DBAL\DriverManager::getConnection($connectionParams, $config);
$conn->update('user', array('name' => 'X3'), array('name' => 'X2'));

桌子:

CREATE TABLE `user` (
  `id` int(11) NOT NULL,
  `name` text NOT NULL,
  `date` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP
) ENGINE=InnoDB DEFAULT CHARSET=utf8;

一些测试数据:

INSERT INTO `user` (`id`, `name`, `date`) VALUES
(1, 'A', '0000-00-00 00:00:00'),
(2, 'B', '0000-00-00 00:00:00'),
(3, 'C', '0000-00-00 00:00:00'),
(4, 'F', '0000-00-00 00:00:00'),
(10, 'X2', '2015-11-10 14:47:08');

您可以重新测试并确保日期字段中的所有参数都正确吗?

于 2015-11-10T14:53:42.360 回答