对thinkphp3.1命名函数提供了一系列(相干)的模型操作的封装,使得您可以查询和处理数据更方便。现在让我们去了解这个使用。

1。定义属性

使用命名函数,它涉及到的模型类和范围一致的操作方法使用_scope属性定义的使用。

我们首先定义_scope属性:


类newsmodel延伸模型{
保护_scope美元=阵列(
命名正常
正常=数组(
哪里= >阵列('status= > 1),
),
命名最新
最新=数组(
秩序= > 'create_time desc,
限制=10,
),
);
}




的_scope属性是一个数组,其中每一个代表一个命名范围和命名范围的定义:


命名范围标识>数组(
属性1值1,
属性2值2,
…
)




2。命名范围标识符:可以是任意字符串,以标识当前定义的名称的范围。

命名范围所支持的属性包括:




哪里
查询条件


场
查询字段


秩序
结果排序


表
查询表的名称


极限
结果限制


页
结果分页


有
具有查询


组
组查询


锁
查询锁定


不同的
独特的查询


隐藏物
查询缓存







每个命名范围的定义可以包括这些属性中的一个或多个。

三.方法调用

在完成属性定义之后,下一步是使用范围方法调用命名范围。命名范围的每个调用相当于执行在命名范围内定义的相关操作选项。

调用命名范围

最简单的调用方式是直接调用命名范围,例如:


美元= D(新闻模型); / /在这里你必须使用D方法由于模型中定义的命名范围
元模型->范围(正常)->选择();
元模型->范围('latest)->选择();




生成的SQL语句如下:


SELECT * FROM think_news地位= 1
SELECT * FROM think_news顺序create_time DESC LIMIT 10




调用多个命名范围

您还可以同时支持调用多个命名定义,例如:


元模型->范围(正常)->范围('latest)->选择();




或简化为:


元模型->(正常范围,新的')->选择();




生成的SQL是:


SELECT * FROM think_news地位= 1阶的create_time DESC LIMIT 10




如果在两个命名范围的定义中存在冲突,那么稍后命名的命名范围的定义覆盖了同一属性的定义。

如果调用的命名范围标识不存在,则命名范围将被忽略,例如:


元模型->(正常范围,新的)->选择();




在上述命名作用域中不存在新的,因此只有正常的命名作用域才生效,生成的SQL语句是:


SELECT * FROM think_news地位= 1






4。默认的命名范围

如果定义默认命名范围,系统支持默认命名函数,例如:




保护_scope美元=阵列(
默认命名范围
默认=数组(
哪里= >阵列('status= > 1),
限制=10,
),
);



然后调用默认的命名范围可以直接使用:


$模型>范围()- >选择();




不再需要再次命名名称的命名名称。


元模型->范围('default)->选择();




虽然这两种方法是等价的。

命名范围调整

如果您需要在正常命名范围的基础上添加额外的调整,您可以使用:


元模型->范围(正常,阵列('limit= > 5))->选择();




生成的SQL语句是:


SELECT * FROM think_news地位= 1限5




当然,它也可以根据两个命名范围进行调整,例如:


元模型->(正常范围,新的阵列('limit= > 5))->选择();




生成的SQL是:


SELECT * FROM think_news地位= 1阶的create_time DESC LIMIT 5






自定义命名范围

或者,如果没有任何现有的命名范围,我直接通过一个命名范围:


元模型->范围(阵列('field= > ID、标题、'limit=>5,= > 'status = 1 = >,是'create_time desc))->选择();




这样,生成的SQL就变成了:


选择ID、标题从哪里think_news状态= 1阶的create_time DESC LIMIT 5






5。结合相干操作

命名范围可以用在以前的相干混合运算方式,如定义命名范围_scope财产:


保护_scope美元=阵列(
正常=数组(
哪里= >阵列('status= > 1),
场= > ID、标题,
限制=10,
),
);




然后,当使用时,你可以这样称呼它:


元模型->范围(正常)->(8)->命令限制(ID DESC)->选择();




这样,生成的SQL就变成了:


选择ID,从think_news地位= 1订单ID DESC LIMIT 8题




如果定义的命名范围与相干操作的属性相冲突,下面的调用将覆盖前面。

如果是这样一个电话:


元模型->(8)->限制范围(正常)->命令(ID DESC)->选择();




生成的SQL是:


选择ID,从think_news地位= 1订单ID DESC LIMIT 10题






总结

命名函数的优点是它可以同时定义多个调用,并且可以在项目中起到分工的作用,这样开发人员就可以在编写豆腐操作时避免问题。项目经理只需合理规划它们的命名范围。