CURD:create(建立)、update(更新)、read(读取)、delete(删除)php
1.数据对象建立(create):
a.TP提供了create方法迅速的建立数据对象,可一自动的根据表单数据建立对象,支持数组,对象,甚至能够把一个数据对象建立给一个新的数据对象,如:
$User=M('User');
$User->name='ThinkPHP';
$User->email='ThinkPHP@gmail.com';
$Member=M('Member');
$Member->create($User);
b.create方法的第二个可选参数可一指定当前的数据操做状态(插入:Model::MODEL_INSERT或是1;更新:Model::MODEL_UPDATE或是2);
默认状况下会自动判断数据的操做状态:首先要求操做的数据有数据库中对应的主键字段,不然不会操做成功;若是须要操做的数据的主键字段值已经存
在于数据表中,则系统自动断定操做的模式为update模式;若是要操做的数据的主键的主键值不存在于数据表中,则系统自动断定操做的模式为insert模式。
c.create方法建立的数据对象是保存在内存中的,并无保存到数据表中,所以咱们在数据保存到数据表以前能够对已经建立爱的数据对象进行更改,知道调
用了save或是add方法;
d.若是咱们有自定义模型类,对于数据新增和编辑操做的话,咱们还能够设置insertFields和updateFields属性来定义容许的子字段,如:
namespace Home\Think;
use Think\Model;
class UserModel extends Model{
protected $insertFields='name,email';//新增数据时容许写入name和email字段
protected $updateFields='email';//更新数据时容许写入email字段
}
e.create方法并不是连贯操做,其返回值多是布尔值,所以须要严格的判断。数据库
2.数据写入:TP主要提供了add方法和addAll方法;
a.add方法略;
b.addAll方法主要用于批量添加数据和批量替换数据,如:
$dataList[]=array('name'=>'ThinkPHP','email'=>'ThinkPHP@gmail.com');
$dataList[]=array('name'=>'OneThink','email'=>'OneThink@gmail.com');
$User->addAll($dataList);数组
3.数据读取(read):读取数据主要分为读取数据、数据集、字段值;
a.读取数据—find
其实就是读取一行数据,主要经过find()来实现;
若是查询出错,返回值为false;若是查询值为空,返回值为NULL;若是查询成功,则返回一个关联数组(以字段名做为键值);
即便有多个知足条件的返回值,find()永远只放回第一条,可是能够经过data获取余下的数据;如:
$User=M('User');
$User->where('name=“Thinkphp” AND status=1')->find();
dump($User->data());
b.读取数据集—select
其实就是读取知足条件的多行记录,主要是经过select()来实现;
若是查询出错,返回值为false;若是查询值为空,返回值为NULL;若是查询成功,则返回一个二位数组。
c.读取字段值-getField
其实就是读取全部知足条件的记录的一个或者几个字段值;主要是经过getField()来实现;
默认状况下,返回的是知足条件的数据的第一行的值,如:$Users->where('id=3')->getField('name')或是$Users->getField('name');
也能够获取整个列的数据:$Users->getField('id',true);
若是须要获取两个列的值:$Users->getField('name,title'):返回一个关联的一维数组,以第一须要获取的字段的对应值为key,
第二个须要获取的字段是的对应值为value的一维关联数组。
若是须要获取三个列的值:$Users—>getField('name,title,pid'):返回一个二维数组,格式是array(`nameValue`=>array(`name`=>nameValue,`title`=>titleValue,`pid`=>pidValue));
还能够限制获取记录的条数:$Users->getField('id,name',3);//获取查询到的前3条的记录安全
4.数据更新(update):数据更新分为更新数据和更新字段;
a.更新数据—save
其实就是更新一整条的记录,主要使用save()来实现;
支持数组和对象:使用数组时,save方法须要传入参数;使用对象时,save方法无需传入参数;
若是更新出错,返回值为false;若是更新成功,返回值为受影响的记录条数;
为了数据安全,更新数据时必须包含条件,而且包含主键字段,不然不会更新任何数据库记录。
b.更新字段—setField
其实就是更新一个字段或者几个字段的值,主要使用setField来实现;
更新一个字段:$Users->where('id=3')->setField('name','ThinkPHP');
更新几个字段:$data=array('name'=>'ThinkPHP','email'=>'ThinkPHP@gmail.com') $Users->where('id=3')->setField($data);
对于通缉字段,提供了SetInc方法和SetDec方法,如:
$Users->where('id=5')->SetInc('score');//score字段增长1
$Users->where('id=5')->SetInc('score',3);//score字段增长3
$Users->where('id=5')->SetDec('score');//score字段减小1
$Users->where('id=5')->SetDec('score',3);//score字段减小3spa
5.删除数据(Delete):
其实就是删除一条或者多条的数据,主要是用delete()来实现;
为了数据安全,使用delete必定要设置删除条件,不然不会删除任何数据;
若是删除出错,返回值为false;若是没有删除数据,返回值为0;若是删除成功,返回值为删除掉记录的条数;
能够删除一条数据,也能够同时删除掉多条数据,这主要取决于删除条件,如:
$Users->delete(3);//删除id为3的记录
$Users->delete(1,3,5);//分别删除id为1,3,5的记录。对象
补充:
1.data方法和add方法的异同?
a.二者的做用都是建立数据对象,可是data使用的场合更为简单,而create能够在建立数据对象的时候实现许多复杂的操做,如field(定义字段的合法性)
validate(数据自动验证)、auto(数据的自动完成)和token(令牌验证)
b.data支持字符串、数组、对想;create支持数组和对象;
2.add方法和save方法的区别?
add方法是直接向数据库中添加数据,save方法则是以主键字段做为判断条件,向数据库中更新数据。token