Copyright(c) DoYouHaoBaby.NET All Rights Reserved.
DyhbFrame模型类的连贯操作方法,可以有效的提高数据存取的代码清晰度和开发效率。使用方面也比较简单, 假如我们现在要查询一个user表的满足状态为1的前10条记录,并希望按照用户的创建时间排序 ,代码如下:
$User->where('status=1')->order('create_time')->limit(10)->findall();
除了findall方法必须放到最后一个外,其他的连贯操作的方法调用顺序没有先后,例如,下面的代码和上面的等效:
$User->order('create_time')->where('status=1')->limit(10)->findall();
如果不习惯使用连贯操作的话,新版还支持直接使用参数进行查询的方式。例如上面的代码可以改写为:
$User->O(array('order'=>'create_time', 'where'=>'status=1', 'limit'=>'10'));
$User->findall();
使用数组参数方式的话,索引的名称就是连贯操作的方法名称。其实不仅仅是查询方法可以使用连贯操作,包括delete等方法都可以使用,例如:
$User->where('id=1')->field('id,name,email')->find();
$User->where('status=1 and id=1')->del();
原则上说,所有的连贯操作都只有一个参数,并且连贯操作的参数仅在当此查询或者操作有效,完成后会自动清空连贯操作的所有传值,简而言之,连贯操作的结果不会带入以后的查询。下面总结下连贯操作的使用方法(更多的用法我们会在CURD操作的过程中详细描述):
Where方法:用于查询或者更新条件的定义
Where方法的参数支持字符串、数组和对象。详细的使用请参考后面的查询语言部分。
table方法:定义要操作的数据表名称
可以动态改变当前操作的数据表名称,可以使用别名,例如:
$Model->table('demo')->where('status>1')->select();
table方法的参数支持字符串和数组,数组方式的用法:
$Model->where('status>1')->findall();
如果不定义table方法,默认会自动获取当前模型对应或者定义的数据表。
field方法:定义要查询的字段
$Model->field('id,nickname as name')->findall();
如果不使用field方法指定字段的话,默认和使用field('*')等效。
order方法:结果排序
例如:
order('id desc')
排序方法支持对多个字段的排序
order('status desc,id asc')
limit方法:结果限制
我们知道不同的数据库类型的limit用法是不尽相同的,但是在ThinkPHP的用法里面始终是统一的方法,也就是limit('offset,length') ,无论是Mysql、SqlServer还是Oracle数据库,都是这样使用,系统的数据库驱动类会负责解决这个差异化。
limit('1,10')
如果使用limit('10') 等效于 limit('0,10')
group方法:查询group支持
group('user_id')
Group方法的参数只支持字符串
having方法:查询having支持
例如:
having('user_id>0')
having方法的参数只支持字符串
join方法:查询join支持
Join方法的参数支持字符串和数组,并且join方法是连贯操作中唯一可以多次调用的方法。
例如:
$Model->join(' work ON artist.id = work.artist_id')->findall();
默认采用LEFT JOIN 方式,如果需要用其他的JOIN方式,可以改成
relation方法:关联查询支持
关联查询方法的详细用法请参考后面的关联模型部分。
