- A+
在Drupal开发设计中,升级查询务必自始至终应用查询在线生成器对象。一些数据库查询必须独特解决LOB(大对象,如文字对MySQL)和BLOB(二进制大对象)的行业,因此一个抽象性层务必容许本人数据库查询驱动安装实行一切独特解决规定。
升级查询根据应用update()方法刚开始,以下:
1 | $query = $connection->update('mytable', $options); |
这将建立一个升级的查询对象,改动一个或好几个记录的连接点表。注:括弧不用在表名做为查询在线生成器,全自动解决。
升级查询对象应用Fluent API。那便是,全部的方法(除开execute())回到查询对象自身容许方法启用被。在很多状况下,这代表查询对象将不用储存到一个自变量在全部。
升级查询的定义是非常简单的,由一组键/值对集和WHERE子句。WHERE子句的详尽节中的标准从句的详细构造,而总是打动于这儿。
典型性的升级查询以下。
1 2 3 4 5 6 7 8 9 10 11 12 13 | $num_updated = $connection->update('mytable') ->fields([ 'field1' => 5, 'field2' => 1, ]) ->condition('created', REQUEST_TIME - 3600, '>=') ->execute(); |
上边的查询将升级在最后一个钟头内建立的MyTABLE表格中的全部记录,并将他们的Field1字段设定为5和Field2字段至1。FieldSe()方法选用一个单一的关系数组,它特定在考虑特定标准时将什么字段设定为何值。留意,与插进查询不一样,UpdateQuery::fields() 只接纳数组。除此之外,数组中的字段次序和启用方法的次序是不相干的。
上边的事例是等效于下边的查询:
1 | UPDATE {mytable} SET field1=5, field2=1 WHERE created >= 1221717405; |
Drupal中,execute()方法将回到受查询危害的行数。特别注意的是,受危害的不配对的同样。在上边的查询中,现有字段5和字段1的目前记录将被配对,可是因为它中的信息不更改,它将不会受到查询的危害,因而不被测算在返回值中。做为负作用,这促使升级查询针对明确给出的记录是不是早已存有失效。
全句智能化原创设计php
1 2 3 | $query = $connection->update('mytable');// Conditions etc. $affected_rows = $query->execute(); |
实行标准
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 | $query = $connection->update('mytable') ->condition('module', 'my_module') ->where( 'SUBSTR(delta, 1, 14) <> :module_key', ['module_key' => 'my_module-key_'] ) ->expression('delta', "REPLACE(delta, 'my_module-other_', 'my_module-thing_')") ->execute(); |
在标准中应用字符串函数
1 2 3 4 5 6 7 8 9 | $query = $connection->update('mytable') ->condition('module', 'my_module') ->condition('SUBSTR(delta, 1, 14)', 'my_module-key_', '<>') // causes error. ->expression('delta', "REPLACE(delta, 'my_module-other_', 'my_module-thing_')") ->execute(); |