tp
1, I方法是ThinkPHP用于更加方便和安全的获取系统输入变量
echo I('get.id'); // 相当于 $_GET['id']
echo I('get.name'); // 相当于 $_GET['name']
2,实例化模型类的方法,三种,直接实例化,D方法和M方法
上面实例化的时候我们需要传入完整的类名,系统提供了一个快捷方法D用于数据模型的实例化操作。
当 \Home\Model\UserModel
类不存在的时候,D函数会尝试实例化公共模块下面的 \Common\Model\UserModel
类。
D方法可以自动检测模型类,如果存在自定义的模型类,则实例化自定义模型类,
如果不存在,则会实例化系统的\Think\Model基类,同时对于已实例化过的模型,不会重复实例化。
D方法实例化模型类的时候通常是实例化某个具体的模型类,
如果你仅仅是对数据表进行基本的CURD操作的话,使用M方法实例化的话,
由于不需要加载具体的模型类,所以性能会更高。
M方法实例化的时候,默认情况下是直接实例化系统的\Think\Model类,
如果你的模型类有自己的业务逻辑,M方法是无法支持的,就算是你已经定义了具体的模型类,
M方法实例化的时候是会直接忽略。
我们在实例化的过程中,经常使用D方法和M方法,
这两个方法的区别在于M方法实例化模型无需用户为每个数据表定义模型类,如果D方法没有找到定义的模型类,
则会自动调用M方法。
数据库相关
3,需要注意的是,ThinkPHP的数据库连接是惰性的,所以并不是在实例化的时候就连接数据库,
而是在有实际的数据操作的时候才会去连接数据库(额外的情况是,在系统第一次实例化模型的时候,
会自动连接数据库获取相关模型类对应的数据表的字段信息)。
4,ThinkPHP find() 方法是和 select() 用法类似的一个方法,
不同之处 find() 查询出来的始终只有一条数据,即系统自动加上了 LIMIT 1 限制。
5,ThinkPHP 还提供了自动创建数据对象的 create() 方法。
create() 方法将自动收集提交的表单数据并创建数据对象而无需人工干预,
这在表单数据字段非常多的情况下更具优势。
create() 创建的数据对象存放于内存,在执行入库动作(add() 或 save())之前,都可以进行修改。
在上面的例子里,create()方法 的行为和 date()方法 是一致。但 date() 方法只是简单的创建数据对象,
但 create() 方法还具备:
- 令牌验证
- 数据自动验证
- 字段映射支持
- 字段类型检查
- 数据自动完成
6,读取数据
读取数据是指读取数据表中的一行数据(或者关联数据),主要通过find
方法完成,
读取数据集其实就是获取数据表中的多行记录(以及关联数据),使用select
方法
读取字段值其实就是获取数据表中的某个列的多个或者单个数据,最常用的方法是 getField
方法
7,修改数据。
save方法的返回值是影响的记录数,如果返回false则表示更新出错,因此一定要用恒等来判断是否更新失败。
为了保证数据库的安全,避免出错更新整个数据表,如果没有任何更新条件,数据对象本身也不包含主键字段的话,save方法不会更新任何数据库的记录。
因此下面的代码不会更改数据库的任何记录
$User->save($data);
还有一种方法是通过create或者data方法创建要更新的数据对象,然后进行保存操作,这样save方法的参数可以不需要传入
如果只是更新个别字段的值,可以使用setField
方法
8,删除数据
为了避免错删数据,如果没有传入任何条件进行删除操作的话,不会执行删除操作,例如:
$User = M("User"); // 实例化User对象
$User->delete();
9,sql查询
query方法用于执行SQL查询操作,如果数据非法或者查询错误则返回false,
否则返回查询结果数据集(同select方法)。
如果你当前采用了分布式数据库,并且设置了读写分离的话,query方法始终是在读服务器执行,
因此query方法对应的都是读操作,而不管你的SQL语句是什么。
execute用于更新和写入数据的sql操作,如果数据非法或者查询错误则返回false ,否则返回影响的记录数。
10标签
volist标签通常用于查询数据集(select方法)的结果输出,通常模型的select方法返回的结果是一个二维数组,
可以直接使用volist标签进行输出。
Volist标签的name属性表示模板赋值的变量名称,因此不可随意在模板文件中改变。id表示当前的循环变量,
可以随意指定,但确保不要和name属性冲突