作者:老葛,北京亚艾元软件有限责任公司,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()中,两者之间没有冲突关系。