初学ThinkPhp

Thinkphp框架CURD

这篇文章主要介绍一下thinkphp框架中的CURD,也就是创建(Create) 、 更新(Update) 、 读取(Read) 和 删除(Delete) 操作。

Create:

public function add(){
    	$m=D('student');//使用D函数实例化模型,create方法
    	if ($m->create()){
    		$result=$m->add();
    		if ($result) {
    			$this->success('数据添加成功');
    		}else{
    			$this->error('数据添加失败');
    		}
    	}else{
            $this->error($m->getError());
    	}
    }
  1. create方法会自动把表单提交的数据进行自动验证和自动完成(如果有定义的话),如果自动验证失败,就可以通过模型的
    getError方法获取验证提示信息,如果验证通过,就表示数据对象已经成功创建,但目前只是保存在内存中,直到我们调用add方法写入数据到数据库。
  2. D函数需要有对应的模型类
    <?php
    namespace Home\Model;
    use Think\Model;
    class FormModel extends Model {
    // 定义自动验证,名字必须为$_validate
    protected $_validate = array(
    array('title','require','标题必须'),
    );
    // 定义自动完成,名字必须为$_auto
    protected $_auto = array(
    array('create_time','time',1,'function'),//回调函数
    );
    }
    注意:在这里的访问修饰符必须为protected,FormModel中的Form为数据库中的表名。
  3. add方法如果主键是自动增长型 成功后返回值就是最新插入的值。如果不是主键的话返回插入数据的个数。错误返回FALSE。
 Read:
$User = M("student"); // 实例化student对象
// 查找name值为thinkphp的学生
$data = $User->where('name="thinkphp"')->find();
dump($data);
  1. 读取数据表中的一行数据(或者关联数据),主要通过 find 方法。find()方法读取主键值,返回一维数组。
  2. dump()为thinkphp的变量输出。
  3. 这里我们用到的是M()函数,M函数与D函数都是实例化模型类,但是D函数需要有对应模型类。如果没有自己的模型类才回去调用TP自带的Model类对象,而M函数直接就回去调用TP自带的Model类对象。
  4. 我们还可以用select,获取所有的数据,以二维数组的形式返回。
  5. 查询语言还包括查询方式,表达式查询,快捷查询,区间查询,组合查询,统计查询,SQL查询,动态查询,子查询。

字符串作为查询条件

$s = M("student"); // 实例化student对象
$s->where('name="zs"')->select();

数组作为查询条件

$s = M("student"); // 实例化student对象
$condition['name'] = 'thinkphp';
$condition['age'] = 10;
// 把查询条件传入查询方法
$s->where($condition)->select();

对象方法来查询

$s = M("student"); // 实例化student对象
// 定义查询条件
$condition = new stdClass();
$condition->name = 'thinkphp';
$condition->age= 10;
$s->where($condition)->select();

表达式查询(表达式很多,就不一一列举了)


$data['name']=array('like','陈%');//模糊查询

快捷查询

不同字段相同的查询条件

$s = M("student"); // 实例化student对象
$map['name|title'] = 'thinkphp';
// 把查询条件传入查询方法
$s->where($map)->select();

不同字段不同的查询条件

$s = M("student"); // 实例化User对象
$map['status&title'] =array('1','thinkphp','_multi'=>true);
// 把查询条件传入查询方法
$s->where($map)->select();//'_multi'=>true 必须加在数组的最后,表示当前是多条件匹配

区间查询

$map['id'] = array(array('gt',1),array('lt',10)) ;

组合查询

$s = M("student"); // 实例化student对象
$map['id'] = array('neq',1);
$map['name'] = 'ok';
$s->where($map)->select();

统计查询


$avgScore = $student->avg('score');//求学生成绩的平均分

SQL查询

query方法用于执行SQL查询操作,如果数据非法或者查询错误则返回false,否则返回查询结果数据集。

$Model = new \Think\Model() // 实例化一个model对象 没有对应任何数据表
$Model->query("select * from student where name='张三'");

execute用于更新和写入数据的sql操作,如果数据非法或者查询错误则返回false ,否则返回影响的记录

数。

$Model = new \Think\Model() // 实例化一个model对象 没有对应任何数据表
$Model->execute("update student set name='李四' where status=1");

动态查询

getBy动态查询该查询方式针对数据表的字段进行查询。暂时不支持多数据字段的动态查询方法。

$user = $User->getByAddress('中国深圳');

getFieldBy动态查询针对某个字段查询并返回某个字段的值。

$userId = $User->getFieldByName('liu21st','id');

子查询

  1. 使用select方法 当select方法的参数为false的时候,表示不进行查询只是返回构建SQL。
  2. 使用buildSql方法,调用buildSql方法后不会进行实际的查询操作,而只是生成该次查询的SQL语句(为了避免混淆,会在
    SQL两边加上括号)。
$data = $model->field('id,name')->select(false);
$data = $model->field('id,name')->buildSql();

Update:

public function update(){
       $model=D('student');
        if ($model->create()) {
            $result=$m->save();//更新调用save
            if ($result) {
                $this->success('操作成功');
            }else{
                $this->error('写入失败');
            }
        }else{
            $this->error($m->getError());
        }
  1. 更新用save(),成功时save返回影响的行数,失败返回false.
  2. 如果只是更新个别字段的值,可以使用 setField 方法。

Delete:

public function delete($id){
        $m=M('student');
        $result=$m->delete($id);
       if ($result) {
             $this->success('删除成功',U("需要跳转的路径"));
         }else{
             $this->error('删除失败');
         }
    }
  1. 删除用delete,delete方法可以删除单个数据,也可以删除多个数据,这取决于删除条件.delete方法的返回值是删除的记录数,如果返回值是false则表示SQL出错,返回值如果为0表示没有删除任何数据。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值