51 有条件设置

作者:老葛,北京亚艾元软件有限责任公司,http://www.yaiyuan.com

    在有些情况下,我们可能会需要根据记录是否存在(由key()中的字段标识),来有条件的设置值。这样做有两种方式。

<?php
db_merge('example')
  ->key(array('name' => $name))
  ->fields(array(
      'field1' => $value1,
      'field2' => $value2,
  ))
  ->update(array(
    'field1' => $alternate1,
  ))
  ->execute();
?>

    上面的例子和最初的例子相比,在对应记录不存在时,结果完全相同;在记录已经存在时,在这里我们更新它,把field1字段的值设置为$alternate1,而不是$value1,对于field2字段则不作任何操作。update()方法的参数可以是一个关联数组,也可以是两个数值数组,一个字段一个值,并且必须使用相同的顺序。

<?php
db_merge('example')
  ->key(array('name' => $name))
  ->fields(array(
      'field1' => $value1,
      'field2' => $value2,
  ))
  ->expression('field1''field1 + :inc', array(':inc' => 1))
  ->execute();
?>

    在这个例子中,如果记录已经存在,那么field1的值将被设置为当前值加1。如果当特定事件发生时你想为计数器作加法,对于这种计数器查询,上述方式非常有用。无论记录是否存在,field2仍然被设置为相同的值。

    注意, expression()可被调用多次,每次对应一个需要设置为表达式的字段,如果记录存在,就会对该字段按表达式进行设置。第一个参数是字段;第二个参数是一个SQL片断,也就是表达式,它用来指示应该如何设置字段;第三个参数是可选的数组,里面包含了占位符的值,这些值将插入到表达式中。

    如果一个字段已经出现在了fields()当中,这个字段仍然可以用在expression()中,两者之间没有冲突关系。


Drupal版本: