博客列表 >查询构造器中10个最常用的方法——5月23日作业

查询构造器中10个最常用的方法——5月23日作业

古典的博客
古典的博客原创
2018年05月24日 17:43:03619浏览

查询构造器中的10个最常用的方法

Table(), field(), order(), where(), limit(), insert(), insertAll(), update(), delete()

以及如何获取自增主键和数据打包方法data()

1、查询单条记录

<?php
namespace app\index\controller;
use think\Db;
class Index
{
    //查询单条记录
    //table()指定要查询的完整表名,推荐使用
    //name()可以省略掉前缀,因为我的表没有前缀,也没有database.php中设置前缀,所以不用它
    //推荐数据表不要加前缀,也不要用name(),用table()完全满足要求
    //find()方法可以获取到满足条件的记录中的第一个,即只返回单条记录
    //如果是根据主键查询,可以直接将主键做为参数传入
    //更多的时候,查询条件是通过where()方法传入,可以看到执行效果是一样的
    //where(字段名,表达式,查询条件),表达式为=号,可以省略,相等是默认值
    public function find()
    {
        $res = Db::table('staff')
//                ->where('staff_id = 10')  //where中可以用字符串
//                ->where('staff_id', '=', 10)  //条件可以分段写
                ->where('staff_id', 10) //默认可以省略等号
                ->find();
        dump($res);
    }
}

执行结果:

array(5) {
 ["staff_id"] => int(10)
 ["name"] => string(9) "西门庆"
 ["sex"] => int(0)
 ["age"] => int(25)
 ["salary"] => int(7500)
}

2、用field()指定查询的字段

<?php
namespace app\index\controller;
use think\Db;
class Index
{
    public function find()
    {
        $res = Db::table('staff')
                // ->field('name,age,salary')
                // ->field(['name','age','salary']) //参数可使用数组
                ->field(['name'=>'姓名', 'age'=>'年龄', 'salary'=>'工资']) //给字段设置别名
                ->where('staff_id', 11)
                ->find();
        dump($res);
    }
}

执行结果:

array(3) {
 ["姓名"] => string(6) "赵敏"
 ["年龄"] => int(30)
 ["工资"] => int(5000)
}

3、用select()查询满足条件的多条记录

<?php
namespace app\index\controller;
use think\Db;
class Index
{
    public function select()
    {
        $res = Db::table('staff')
                ->field(['name'=>'姓名', 'age'=>'年龄', 'salary'=>'工资'])
                ->where('salary', '>', 3000)
                ->order('salary desc')  //支持字符串,数组,分段写
                ->limit(3)
                ->select();
        dump($res);
    }
}

执行结果:

array(3) {
 [0] => array(3) {
   ["姓名"] => string(6) "紫薇"
   ["年龄"] => int(27)
   ["工资"] => int(9900)
 }
 [1] => array(3) {
   ["姓名"] => string(9) "宋青书"
   ["年龄"] => int(40)
   ["工资"] => int(9800)
 }
 [2] => array(3) {
   ["姓名"] => string(12) "金轮法王"
   ["年龄"] => int(25)
   ["工资"] => int(9000)
 }
}

4、insert()插入单条数据

<?php
namespace app\index\controller;
use think\Db;
class Index
{
    public function insert()
    {
        $data = [
            'name'=>'李四',
            'age'=>'38',
            'sex'=>1,
            'salary'=>3800
        ];
        $num = Db::table('staff')
                ->data($data)   //方法将要新增的记录进行打包
                ->insert();
        $id = Db::getLastInsID();   //获取最后插入记录的ID
        return $num?'添加成功'.'id='.$id:'添加失败';
    }
}

执行结果:

添加成功id=36


5、insertAll()新增多条记录,返回新增记录的条数

<?php
namespace app\index\controller;
use think\Db;
class Index
{
    public function insertAll()
    {
        $data = [
            ['name' => '张飞','sex' => 0,'age' => 48,'salary' => 6900],
            ['name' => '刘备','sex' => 0,'age' => 58,'salary' => 4500],
            ['name' => '关羽','sex' => 0,'age' => 53,'salary' => 4700],
        ];
        $num = Db::table('staff')
                ->data($data)   //方法将要新增的记录进行打包
                ->insertAll();
        return $num?'添加成功'.$num.'条记录':'添加失败';
    }
}

执行结果:

添加成功3条记录


6、update()更新操作,必须是基于前置查询,不允许无条件更新

<?php
namespace app\index\controller;
use think\Db;
class Index
{
    public function update()
    {
        //更新salary大于8000的记录,在原基础上把salary减1000
        $num = Db::table('staff')
                ->where('salary > 8000')
                ->data(['salary'=>Db::raw('salary-1000')]) //Db::raw()引用原始数据
                ->update();
        return $num?'更新成功'.$num.'条记录':'更新失败';
    }
}

执行结果:

更新成功4条记录


7、delete() 删除操作,必须基于前置查询,不允许无条件删除

<?php
namespace app\index\controller;
use think\Db;
class Index
{
    public function delete()
    {
        // $num = Db::table('staff')->delete(19);
        // $num = Db::table('staff')->delete([12,14,18]);//多个主键使用数组传入
        $num = Db::table('staff')->where('salary','>',10000)->delete();

        //如果想删除全部记录,可直接给delete()方法传入true: delete(true)
        //$num = Db::table('staff')->delete(true);  //数据表后面还要用,此功能课后练习

        return $num ? '删除成功'.$num.'条记录~~' : '没有记录被删除';

        //提醒: 删除数据是非常危险的操作,强烈建议使用框架提供的软删除来实现,即用更新来模拟删除
    }
}


声明:本文内容转载自脚本之家,由网友自发贡献,版权归原作者所有,如您发现涉嫌抄袭侵权,请联系admin@php.cn 核实处理。
全部评论
文明上网理性发言,请遵守新闻评论服务协议