辅助方法即相对于上文的主方法而言,在连贯操作中辅助主方法实现各种数据库操作条件,如上面例子中的 where、limit 等方法。
where 方法用于设定操作条件,详细见:《ThinkPHP where方法》。
where 方法用于将查询结果排序,支持单个或多个字段排序,参数支持字符串和数组:
// 单个字段 $allUser = $Dao ->order( 'uid DESC' )->select(); // 多个字段 $allUser = $Dao ->order( 'regdate ASC,score DESC' )->select(); // 参数为数组 $allUser = $Dao ->order( array ( 'regdate' => 'ASC' , 'score DESC' ))->select(); |
limit 方法用于限制操作结果,对于不同的数据库,ThinkPHP 将操作结果限制统一为 limit 方法,语法如下:
limit( '<offset>length' ) </offset> |
如果使用 limit('10') 等效于 limit('0,10')。
定义要查询的字段,参数支持字符串和数组:
$allUser = $Dao ->field( 'username,email' )->select(); // 使用数组参数 $allUser = $Dao ->field( array ( 'nickname' => 'name' , 'email' ))->select(); |
如果不使用 field 方法指定查询字段,则等效为 field('*')。
用于新增或者保存数据之前的数据对象赋值:
$data [ 'email' ] = 'Jack@163.com' ; $Dao ->data( $data )->where( 'id=3' )->save(); // 如果不定义data方法赋值,则可以在主方法中传入参数或者使用create数据对象: $Dao ->where( 'id=3' )->save( $data ); |
data 方法的参数支持对象和数组,如果是对象会自动转换成数组。
GROUP BY 语法支持,group 方法的参数只支持字符串:
$allUser = $Dao ->group( 'regon' )->select(); |
HAVING 语法支持,having 方法的参数只支持字符串:
$allUser = $Dao ->having( 'score > 100' )->select(); |
DISTINCT 语法支持,查询数据的时候进行唯一过滤:
$allUser = $Dao ->distinct( 'username' )->select(); |
JOIN 语法支持,具体参见《ThinkPHP JOIN查询》。
table 方法可以动态改变当前操作的数据表名称,需要写数据表的全名(包含前缀),可以使用别名:
$allUser = $Dao ->table( 'my_user' )->select(); |
table 方法参数除字符串外还支持数组:
$allUser = $Dao ->table( array ( 'my_user' => 'user' , 'my_group' => 'group' ))->select(); |
使用数组方式可以避免因为表名和关键字冲突而出错的情况。如果不定义table方法,默认会自动获取当前模型对应或者定义的数据表。
page方法用于查询分页,具体参见《ThinkPHP 分页》。
$allUser = $Dao ->lock(true)->select(); |
该例子会在生成的 SQL 语句最后加上 FOR UPDATE 。
与主方法不同的是,上述这些辅助方法可以根据实际情况自由组合,且顺序没有前后要求。
连贯操作中各方法的参数仅在当次操作有效,完成后会自动清空连贯操作的所有传值,不会带入以后的操作中。