Blogger Information
Blog 4
fans 0
comment 0
visits 2739
Popular Tutorials
More>
Latest Downloads
More>
Web Effects
Website Source Code
Website Materials
Front End Template
查询构造器中10个最常用的方法——5月23日作业
古典的博客
Original
620 people have browsed it

查询构造器中的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.'条记录~~' : '没有记录被删除';

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


Statement of this Website
The copyright of this blog article belongs to the blogger. Please specify the address when reprinting! If there is any infringement or violation of the law, please contact admin@php.cn Report processing!
All comments Speak rationally on civilized internet, please comply with News Comment Service Agreement
0 comments
Author's latest blog post