3.2.2 内置方法
系统模型提供了一系列快捷操作的方法,可以大幅提高开发效率。目前已提供的方法主要有select、find、limit、table、order、where、field、on、join、count、page、attr、showpage、insert、insertAll、delete、update、group、having、distinct、clear、query、execute、sum、avg、max、min、setInc、setDec、和动态方法getby_、getfby_。
1. Select 方法:取得查询信息,返回结果为数组,如果未找到数据返回null,select一般在where,order,tabale等方法的后面,作为最后一个方法来使用。如:
$model
=
Model
(
'member'
);
//
查询会员表全部信息
$model
->
select
();
//
取得性别为1的会员列表信息, 注意:select方法需要在连贯操作中的最后一步出现
$model
->
where
(array(
'member_sex'
=>
1
))->
select
();
Select 方法可以传入主键ID,系统会自动查找对应信息,如:
//
查询主键ID为5的会员信息
$model
=
Model
(
'member'
);
$model
->
select
(
5
);
2. Find 方法:取得一条记录信息,find同select一样,一般作为最后一个方法来使用,如:
$model
=
Model
(
'member'
);
//
查询ID为5的会员信息
$model
->
where
(array(
'member_id'
=>
5
))->
find
();
Find方法可以传入主键ID,系统会自动查找对应信息,如:
$model
=
Model
(
'member'
);
//
查询主键ID为5的会员信息
$model
->
find
(
5
);
3. Limit 方法:指定返回多少条记录数,
$model
=
Model
(
'member'
);
$model
->
limit
(
4
)->
select
();
//
等同于SELECT * FROM member LIMIT 4;
$model
->
limit
(
'4,10'
)->
select
();
//
等同于SELECT * FROM member LIMIT 4,10;
4. Table方法:指定要操作的数据表名称,返回模型实例本身,如:
$model
=
Model
();
//
查询主键ID为5的会员信息
$model
->
table
(
'member'
)->
find
(
5
);
多表联合查询时,可以传入多个表名称,如:
//
内链接查询member和store表,并返回前两条记录
$on
=
'store.member_id=member.member_id'
;
$model
->
table
(
'member,store'
)->
join
(
'inner'
)->
on
(
$on
)->
limit
(
2
)->
select
();
如果实例化时指定了表名,则可以不使用table方法指定表名,如:
$model
=
Model
(
'member'
);
$model
->
limit
(
4
)->
select
();
//
查询前条4会员记录
5. Order 方法:指定排序的参数,返回模型实例本身,如:
$model
->
table
(
'member'
)->
order
(
'member_id desc'
)->
limit
(
4
)->
select
();
也可指定多个字段进行排序,如:
$model
->
table
(
'member'
)->
order
(
'member_id desc,member_sex asc'
)->
select
();
6. Where 方法:指定sql执行的条件,返回模型实例本身,入可传入数组或字段串,如:
//
传入数组条件
$model
->
where
(array(
'member_id'
=>
5
))->
find
();
//
传入字符串条件
$model
->
where
(array(
'member_id=5'
))->
find
();
//
传入多表关联条件
$model
->
table
(
'member,store'
);
$model
->
where
(
'store.store_id=member.store_id and store.store_id=2'
)->
find
();
7. Field 方法:指定要查询的字段,不使用field方法时,默认查询所有字段,如:
$model
->
field
(
'member_id,member_name'
)->
select
();
8. On 方法:指定多表联查时的字段关系。
9. Join 方法:指定多表联查时的链接类型, 支持内链接、左链接(默认)、右链接。On与join方法需要一起使用,如:
$model
=
Model
();
//
内链接查询member和store表,返回会员ID为6的记录信息
$field
=
'member.member_name,store.store_name'
;
$on
=
'store.member_id=member.member_id'
;
$model
->
table
(
'member,store'
)->
field
(
$field
);
$model
->
join
(
'inner'
)->
on
(
$on
)->
where
(array(
'member.member_id'
=>
6
))->
find
();
三表关联查询如下:
$model
=
Model
();
//
内链接查询member和store,然后左链接store_class,查询会员ID为6的记录信息
$field
=
'member.member_name,store.store_name,store_class.sc_name'
;
$on
=
'store.member_id=member.member_id,store.sc_id=store_class.sc_id'
;
$model
->
table
(
'member,store,store_class'
)->
field
(
$field
);
$model
->
join
(
'inner,left'
)->
on
(
$on
)->
where
(
'member.member_id=6'
)->
find
();
10. Count 方法:返回记录总数量,如:
$model
=
Model
(
'member'
);
//
返回会员表总行数
$model
->
count
();
//
返回会员ID大于15的记录数
$model
->
where
(
'member_id>15'
)->
count
();
11. Page 方法:实现记录分页,格式为page(每页显示数,总记录数),总记录数可以人为指定,也可以为空让系统自动去计算,如:
//
每页显示10条数据
$model
=
Model
(
'member'
);
//
系统会跟据每页显示数和已知属性自动计算总记录数
$model
->
page
(
10
)->
order
(
'member_id desc'
)->
select
();
//
每页显示10条数据,指定总记录为1000条,系统将不再计算总记录数
$model
->
page
(
10, 1000
)->
order
(
'member_id desc'
)->
select
();
注意:如果同时使用where和page方法时,where方法要在page方法前面使用,如:
$model
->
where
(
'id=1'
)->
page
(
10
)->
select
();
//
正确
$model
->
page
(
10
)->
where
(
'id=1'
)->
select
();
//
错误
12. Showpage 方法:返回分页超链接,结合page方法完成分页,如:
//
显示上一页下一下链接
$model
->
showpage
(
1
);
//
样式1
$model
->
showpage
(
2
);
//
样式2(默认)
13. Insert 方法:插入单行数据,并返回最新插入的主键ID,如果插入失败返回false,完整格式如下:
insert
(
$data
=
''
,
$replace
=
false
,
$options
=array())
//
向link表插入数据,并返回最新主键ID
$model
=
Model
(
'table'
);
$data
= array(
'link_title'
=>
'ShopNC'
,
'link_url'
=>
'http://www.shopnc.net'
,
'link_sort'
=>
32
,
);
$model
->
insert
(
$data
);
Insert方法支持延迟插入,加入$options参数即可,如:
$model
->
insert
(
$data
,
false
,array(
'priority'
=>
'DELAYED'
));
Insert方法同样支持replace操作,将第二个参数设置为true即可,如:
$model
=
Model
();
$data
= array(
'link_title'
=>
'ShopNC'
,
'link_url'
=>
'http://www.shopnc.net'
,
'link_sort'
=>
32
,
'link_id'
=>
30
);
$model
->
table
(
'link'
)->
insert
(
$data
,
true
);
14. InsertAll 方法:实现批量插入数据,如:
$model
=
Model
(
'link'
);
$data
= array(
array(
'link_title'
=>
'
新浪'
,
'link_url'
=>
'http://www.sina.com'
,
'link_sort'
=>
32
,
),
array(
'link_title'
=>
'
百度'
,
'link_url'
=>
'http://www.baidu.com'
,
'link_sort'
=>
30
,
)
);
$model
->
insertAll
(
$data
);
15. Delete 方法:删除记录,如:
$model
=
Model
(
'link'
);
//
删除主键为5的记录
$model
->
delete
(
5
);
//
或者
$model
->
where
(array(
'link_id'
=>
5
))->
delete
();
16. Update 方法:数据更新,如果更新内容含有主键下标,自动以该主键为更新条件,如:
$model
=
Model
();
//
更新主键(link_id)为37的记录信息
$data
= array(
'link_title'
=>
'ShopNC'
,
'link_url'
=>
'http://www.shponc.net'
,
'link_sort'
=>
32
,
'link_id'
=>
37
);
$model
->
table
(
'link'
)->
update
(
$data
);
//
指定更新条件
$data
= array(
'link_title'
=>
'ShopNC'
,
'link_url'
=>
'http://www.shponc.net'
,
'link_sort'
=>
32
);
$model
->
table
(
'link'
)->
where
(array(
'link_id'
=>
37
))->
update
(
$data
);
17. Group 方法:实现分组功能,如:
//
查询每个店铺发布商品的数量
$model
=
Model
(
'goods'
);
$model
->
field
(
'store_id,count(*) as count'
)->
group
(
'store_id'
)->
select
();
18. Having 方法:结合group方法,进行条件过滤,传入参数为字符串形式,如:
//
查找发布商品超过500的店铺ID
$model
=
Model
(
'goods'
);
$model
->
field
(
'store_id,count(*) as nc_count'
)->
group
(
'store_id'
)->
having
(
'nc_count>500'
)->
select
();
19. Distinct 方法:可以去除列中相同的值,distinct只接受一个参数值true,如果不需要重复值筛选,不使用该方法即可。
//
查找拥有商品的店铺主键
$model
=
Model
();
$model
->
table
(
'goods'
)->
field
(
'store_id'
)->
distinct
(
true
)->
select
();
20. Clear 方法:清空单个表中的内容,返回true/false,如:
//
清空link表
$model
=
Model
();
$model
->
table
(
'link'
)->
clear
();
21. Query/execute 方法,两个方法均用于直接执行SQL语句,query方法用于查询,execute方法用于更新、写入和删除操作,如:
Model
()->
query
(
'SELECT * FROM `shopnc_member` LIMIT 10'
);
Model
()->
execute
(
'UPDATE `shopnc_goods` SET goods_click=1000 WHERE goods_id=2'
);
22. Sum/Avg/Max/Min 方法:求和、求平均值、取最大值、取最小值,如:
$model
=
Model
();
//
返回所有商品总价格之和
$model
->
table
(
'goods'
)->
sum
(
'price'
);
//
上面等同于SQL:SELECT SUM(price) AS nc_sum FROM `goods`
//
取商品表中所有商品的平均价格
$model
->
table
(
'goods'
)->
avg
(
'price'
);
//
以上等同于SQL:SELECT AVG(price) AS nc_avg FROM `goods` LIMIT 1
//
取商品的最高价
$model
->
table
(
'goods'
)->
max
(
'price'
);
//
以上等同于SQL:SELECT MAX(price) AS nc_max FROM `goods` LIMIT 1
//
取商品的最低价
$model
->
table
(
'goods'
)->
min
(
'price'
);
//
以上等同于SQL:SELECT MIN(price) AS nc_min FROM `goods` LIMIT 1
23. 自增/自减:系统使用setInc和setDec完成自增和自减,示例如下:
$model
=
Model
();
//
使主键值为2的商品点击量加1000
$model
->
table
(
'goods'
)->
where
(array(
'goods_id'
=>
2
))->
setInc
(
'goods_click'
,
1000
);
//
等同于:UPDATE `goods` SET goods_click=goods_click+3 WHERE ( goods_id = '2' )
//
结合exp参数,使用该商品点击量减1000
$model
=
Model
(
'goods'
);
$data
= array(
'goods_id'
=>
2
,
'goods_click'
=>array(
'exp'
,
'goods_click-1000'
));
$model
->
update
(
$data
);
//
等同于:UPDATE `goods` SET goods_click=goods_click-1000 WHERE ( goods_id = '2' )
24. 动态方法:系统内置getby_和getfby_两个动态方法,格式如下:
getby_ + 字段名(字段值)
getfby_ + 条件字段名(条件字段值,返回字段名)
结合示例来说明动态方法的使用
$model
=
Model
(
'member'
);
//
使用getby_动态方法,取得member_name为kevin的会员信息
$model
->
getby_member_name
(
'kevin'
);
//
等同于SQL:SELECT * FROM `member` WHERE ( member_name = 'kevin' ) LIMIT 1
//
使用getfby_方法,取得member_id为6的会员名
$a
=
$model
->
getfby_member_id
(
6
,
'member_name'
);
//
返回 kevin
//
等同于SQL:SELECT member_name FROM `shopnc_member` WHERE ( member_id = '6' ) LIMIT 1
25. 设置SQL执行优先级:系统支持使用SQL关键字LOW_PRIORITY、DELAYED、HIGH_PRIORITY,格式如下:
attr(关键字)
结合示例来说明动态方法的使用
$model
=
Model
(
'goods'
);
$model
->
where
(array(
'goods_id'
=>
100
))->
attr
(
'LOW_PRIORITY'
);
$model
->
update
(array(
'goods_click'
=>array(
'exp'
,
'goods_click+1'
)));
//
等同于
//UPDATE LOW_PRIORITY `shopnc_goods` SET goods_click=goods_click+1 WHERE ( goods_id = '100' )
Copyright ©2009 - 2014 shopnc.net.All rights reserved.
Powered By ShopNC