【问题标题】:Doctrine 2 DBAL expressions in update or insert methods更新或插入方法中的 Doctrine 2 DBAL 表达式
【发布时间】:2015-03-12 20:06:28
【问题描述】:

我喜欢学说 2 DBAL 中数据操作查询 $conn->insert() 和 $conn->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 = ?

因此这些值将被视为字符串。 有没有办法使用这种技术来完成这项工作?

【问题讨论】:

    标签: php mysql doctrine-orm doctrine dbal


    【解决方案1】:

    有一个可选的$types 参数,默认为空数组:

        public function update($tableExpression, array $data, array $identifier, array $types = array())
    

    $types 数组可以包含 PDO type constants,这将改变对应的 $data 值的处理方式。

    所以我会尝试:

    $conn->update(
        'person',                          // $tableExpression
        array('phone' => null),            // $data
        array('id' => 1),                  // $identifier
        array('phone' => \PDO::PARAM_NULL) // $types
    );
    

    【讨论】:

    • 使用 on ->insert 对我不起作用...我改为发送 NULL。
    猜你喜欢
    • 2012-04-18
    • 2015-07-17
    • 2013-07-29
    • 1970-01-01
    • 2014-04-30
    • 2014-03-08
    • 2015-09-26
    • 1970-01-01
    • 2014-01-27
    相关资源
    最近更新 更多