53 优先级
作者:老葛,北京亚艾元软件有限责任公司,http://www.yaiyuan.com
使用上面的API,程序员很有可能定义出来没有任何意义的查询,比如一个字段,在假定记录存在的情况下,既被设置为了忽略,又被设置为了表达式。下面的规则,可以帮助减少潜在的错误:
作者:老葛,北京亚艾元软件有限责任公司,http://www.yaiyuan.com
使用上面的API,程序员很有可能定义出来没有任何意义的查询,比如一个字段,在假定记录存在的情况下,既被设置为了忽略,又被设置为了表达式。下面的规则,可以帮助减少潜在的错误:
作者:老葛,北京亚艾元软件有限责任公司,http://www.yaiyuan.com
db_merge('example')
->key(array('name' => $name))
->fields(array(
'field1' => $value1,
'field2' => $value2,
))
->updateExcept('field1')
->execute();
?>
在有些情况下,我们可能会需要根据记录是否存在(由key()中的字段标识),来有条件的设置值。这样做有两种方式。
作者:老葛,北京亚艾元软件有限责任公司,http://www.yaiyuan.com
db_merge('example')
->key(array('name' => $name))
->fields(array(
'field1' => $value1,
'field2' => $value2,
))
->execute();
?>
作者:老葛,北京亚艾元软件有限责任公司,http://www.yaiyuan.com
合并查询是一种特殊的混合查询类型。虽然在SQL2003规范中为它们定义了语法,但实际上几乎没有任何数据库支持该标准语法。然而,大多数数据库通过使用特定于数据库的语法,都提供了一些替代实现。在Drupal中,合并查询构建器把合并查询的概念抽象成为了一个结构化的对象,根据数据库的不同,它们会被编译成特定于数据库的语法。
在一般意义上,合并查询就是插入查询和更新查询的联合体。如果满足了给定条件,比如包含给定主键的记录已经存在,此时运行一个更新查询。如果给定条件未满足,则运行其它查询,比如插入查询。在大多数情况下,它等价于:
作者:老葛,北京亚艾元软件有限责任公司,http://www.yaiyuan.com
删除查询必须使用一个查询构建器对象。它们使用db_delete()函数作为开始,如下所示:
作者:老葛,北京亚艾元软件有限责任公司,http://www.yaiyuan.com
更新查询必须使用一个查询构建器对象。对于LOB (大对象, 比如MySQL中的TEXT) 和BLOB(二进制大对象)字段,某些数据库需要特殊处理,所以我们需要一个抽象层,从而允许独立的数据库驱动,按照它们自己的要求实现自己的特殊处理。
作者:老葛,北京亚艾元软件有限责任公司,http://www.yaiyuan.com
在正常情况下,如果你没有为给定字段指定一个值,而表的模式(schema)定义了默认值,那么数据库会自动的为你插入默认值。然而,在大多数的情况下,你需要明确的指示数据库使用默认值。它包括你是否想为整个记录使用所有的默认值。为了明确的告诉数据库,为给定的字段使用默认值,我们可以使用useDefaults()方法。