【问题标题】:ON UPDATE MySQL with doctrine DBAL使用教义 DBAL 更新 MySQL
【发布时间】:2015-10-28 16:18:59
【问题描述】:

我将教义 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);调用更新

如何从理论/dbal 代码运行on update 触发器?

编辑:

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

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

【问题讨论】:

    标签: php mysql doctrine-orm doctrine onupdate


    【解决方案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');
    

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

    【讨论】:

    • 没错,我从数据库中获取所有数据以填充我的表单,然后将所有数据发回。所以我的日期也发送了,并且没有执行 ON UPDATE
    猜你喜欢
    • 2015-09-22
    • 2016-06-02
    • 2017-06-10
    • 1970-01-01
    • 2013-05-26
    • 1970-01-01
    • 2014-08-28
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多