ThinkPHP3.2-CURD操作

作者: 栾呱呱 | 来源:发表于2016-07-16 18:04 被阅读392次

    数据创建

    create方法创建数据对象

    create()方法支持从其他方式创建数据对象,例如,其他数据对象或者是数组。

    • 从User对象创建新的Member数据对象
    $User = stdClass();
    $User->name = 'ThinkPHP';
    $User->email = 'ThinkPHP@gmail.com';
    $Member = M("Member");
    $Member->create($User);    
    
    • 从数组创建对象
    $data['name'] = 'thinkphp';
    $data['email'] = 'thinkphp@gmail.com';
    $data['status'] = 1;
    $User = M('User');
    $data = $User->create($data);  
    

    创建失败,打出错误信息。

    $User = D('User'); // 实例化User对象
    if (!$User->create()) {
    // 如果创建失败 表示验证没有通过 输出错误提示信息
       $this->error($User->getError());
    } else {
       // 验证通过 可以进行其他数据操作
    }
    

    create方法的第二个参数可以指定创建数据的操作状态,默认情况下是自动判断是写入还是更新操作。系统内置的数据操作包括INSERT(1)和UPDATE(2),当没有指定的时候,系统根据数据源是否包含主键数据来自动判断,如果存在主键数据,就当成UPDATE操作。

    $Member = M("User");
    $Member->create($_POST,Model::MODEL_UPDATE);
    

    create方法创建的数据对象是保存在内存中,并没有实际写入到数据库中,直到使用add或者save方法才会真正写入数据库。

    $User = M('User');
    $User->create(); //创建User数据对象
    $User->status = 1; // 设置默认的用户状态
    $User->create_time = time(); // 设置用户的创建时间
    $User->add(); // 把用户对象写入数据库
    

    把用户对象写入数据库create方法所做的工作很复杂,在创建数据对象的同时,完成了一系列的工作。我们熟悉的令牌验证、自动验证自动完成功能,其实都必须通过create方法才能生效。

    data方法创建简单的数据对象

    如果只是想简单创建一个数据对象,并不需要完成一些额外的功能的话,可以使用data方法简单的创建数据对象。Data方法也支持传入数组和对象,使用data方法创建的数据对象不会进行自动验证和过滤操作,请自行处理。

    $User = M('User');// 创建数据后写入到数据库 
    $data['name'] = 'ThinkPHP';
    $data['email'] = 'ThinkPHP@gmail.com';
    $User->data($data)->add();
    

    数据写入

    add方法插入一条数据
    $User = M("User"); // 实例化User对象
    $data['name'] = 'ThinkPHP';
    $data['email'] = 'ThinkPHP@gmail.com';
    $User->add($data);
    

    如果写入了数据表中不存在的字段数据,则会被直接过滤。其中test字段是不存在的,所以写入数据的时候会自动过滤掉。

    $data['name'] = 'thinkphp';
    $data['email'] = 'thinkphp@gmail.com';
    $data['test'] = 'test';
    $User = M('User');
    $User->data($data)->add();
    

    如果写入结果$result数据非法则返回false,如果是自增主键 $result则返回主键值,否则返回1。

    addAll方法插入批量数据
    $User = M("User");
    $dataList[] = array('name'=>'thinkphp','email'=>'thinkphp@gamil.com');
    $dataList[] = array('name'=>'onethink','email'=>'onethink@gamil.com');
    $User->addAll($dataList);
    

    addAll返回的不是影响条数,也不是返回的所有写入的主键id集,而是返回的写入的第一条数据的主键值。

    该功能需要3.2.3以上版本,3.2.3以下版本仅对mysql数据库支持

    数据读取

    find读取数据

    如果查询出错,find方法返回false,如果查询结果为空返回NULL,查询成功则返回一个关联数组(复合条件的第一条记录)。

    $User = M("User"); // 实例化User对象    
    $data = $User->where('status=1 AND name="thinkphp"')->find();// 查找status值为1name值为think的用户数据 
    
    select读取数据集

    如果查询出错,select的返回值是false,如果查询结果为空,则返回NULL,否则返回二维数组。

    $User = M("User"); // 实例化User对象
    $list = $User->where('status=1')->order('create_time')->limit(10)->select();// 查找status值为1的用户数据 以创建时间排序 返回10条数据
    
    getField读取字段值

    获取数据表中的某个列的多个或者单个数据,默认情况下,当只有一个字段的时候,返回满足条件的数据表中的该字段的第一行的值。

    $User = M("User"); // 实例化User对象
    $nickname = $User->where('id=3')->getField('nickname');// 获取ID为3的用户的昵称 
    

    需要返回整个列的数据,加一个参数true

    $User->getField('id',true); // 获取id数组
    //返回数据格式如array(1,2,3,4,5)一维数组,其中value就是id列的每行的值
    

    如果传入多个字段的话,默认返回一个关联数组。注意,即使缺少true参数,返回的也是全部行数的数据

    $User = M("User"); // 实例化User对象// 获取所有用户的ID和昵称列表    
    $list = $User->getField('id,nickname');//两个字段的情况下返回的是array(`id`=>`nickname`)的关联数组。
    

    getField方法还可以支持限制数量

    $this->getField('id,name',5); // 限制返回5条记录
    $this->getField('id',3); // 获取id数组 限制3条记录
    

    数据更新

    save方法更新数据
    $User = M("User"); // 实例化User对象
    $data['name'] = 'ThinkPHP';
    $data['email'] = 'ThinkPHP@gmail.com';
    $User->where('id=5')->save($data); // 根据条件更新记录
    

    对象方式操作

    $User = M("User"); // 实例化User对象
    $User->name = 'ThinkPHP';
    $User->email = 'ThinkPHP@gmail.com';
    $User->where('id=5')->save(); // 根据条件更新记录
    

    注意:save方法的返回值是影响的记录数,如果返回false则表示更新出错,因此一定要用恒等来判断是否更新失败。

    如果id是数据表的主键的话,系统自动会把主键的值作为更新条件来更新其他字段的值。

    $User = M("User"); // 实例化User对象
    $data['id'] = 5;
    $data['name'] = 'ThinkPHP';
    $data['email'] = 'ThinkPHP@gmail.com';
    $User->save($data); // 根据条件保存修改的数据
    
    更新字段

    更新个别字段的值,可以使用setField方法。

    $User = M("User"); // 实例化User对象
    $User-> where('id=5')->setField('name','ThinkPHP');// 更改用户的name值
    

    setField方法支持同时更新多个字段,只需要传入数组即可。

    $User = M("User"); // 实例化User对象
    $data = array('name'=>'ThinkPHP','email'=>'ThinkPHP@gmail.com');
    $User-> where('id=5')->setField($data);// 更改用户的name和email的值
    

    统计字段(通常指的是数字类型)的更新,系统还提供了setInc和setDec方法。

    $User = M("User"); // 实例化User对象
    $User->where('id=5')->setInc('score',3); // 用户的积分加3
    $User->where('id=5')->setInc('score'); // 用户的积分加1
    $User->where('id=5')->setDec('score',5); // 用户的积分减5
    $User->where('id=5')->setDec('score'); // 用户的积分减1
    

    数据删除

    删除一条数据

    $User = M("User"); // 实例化User对象
    $User->delete(5); // 删除主键为5的用户数据
    

    delete方法可以删除单个数据,也可以删除多个数据,这取决于删除条件。

    $User = M("User"); // 实例化User对象
    $User->where('id=5')->delete(); // 删除id为5的用户数据
    $User->delete('1,2,5'); // 删除主键为1,2和5的用户数据
    $User->where('status=0')->delete(); // 删除所有状态为0的用户数据
    

    为了避免错删数据,如果没有传入任何条件进行删除操作的话,不会执行删除操作

    delete方法的返回值是删除的记录数,如果返回值是false则表示SQL出错,返回值如果为0表示没有删除任何数据。

    本文介绍基本来自官方文档,如有疑问,参见ThinkPHP官方文档CURD操作

    相关文章

      网友评论

        本文标题:ThinkPHP3.2-CURD操作

        本文链接:https://www.haomeiwen.com/subject/jupyjttx.html