标签:
CURD:create(创建)、update(更新)、read(读取)、delete(删除)
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字段减少3
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方法则是以主键字段作为判断条件,向数据库中更新数据。
标签:
原文地址:http://my.oschina.net/u/1771585/blog/472243