ThinkPHP5.1的常用增删改查操作

黎小强
2021-07-17 / 0 评论 / 241 阅读 / 正在检测是否收录...

增删改查的操作

学习一下数据库 Db 类的查询语句,包含 table、name 以及助手函数 db。

学习来源于李炎恢TP5讲义

一. 新增数据

  1. 使用 insert() 方法可以向数据表添加一条数据

    $data = [
        'username' => '辉夜',
        'password' => '123',
        'gender' => '女',
        'email' => 'huiye@163.com',
        'price' => 90,
        'details' => '123',
        'create_time' => date('Y-m-d H:i:s')
    ];
    Db::name('user')->insert($data);
  2. 如果新增成功,insert() 方法会返回一个 1 值

    $flag = Db::name('user')->insert($data);
    if ($flag) return '新增成功!';
  3. 你可以使用 data() 方法来设置添加的数据数组

    Db::name('user')->data($data)->insert();
  4. 如果你添加一个不存在的数据,会抛出一个异常 Exception;
  5. 如果采用的是 mysql 数据库,支持 REPLACE 写入

    Db::name('user')->insert($data, true);
  6. 使用 insertGetId() 方法,可以在新增成功后返回当前数据 ID

    Db::name('user')->insertGetId($data);
  7. 使用 insertAll() 方法,可以批量新增数据,但要保持数组结构一致

    $data = [
        [
        'username' => '辉夜 1',
        'password' => '123',
        'gender' => '女',
        'email' => 'huiye@163.com',
        'price' => 90,
        'details' => 123,
        'create_time' => date('Y-m-d H:i:s')
        ],
        [
        'username' => '辉夜 2',
        'password' => '123',
        'gender' => '女',
        'email' => 'huiye@163.com',
        'price' => 90,
        'details' => 123,
        'create_time' => date('Y-m-d H:i:s')
        ],
    ];
    Db::name('user')->insertAll($data);
  8. 批量新增也支持 data()方法,和单独新增类似;

    Db::name('user')->data($data)->insertAll()
  9. 批量新增也支持 reaplce 写入,和单独新增类似;

    Db::name('user')->insertAll($data, true);

二. 修改数据

  1. 使用 update() 方法来修改数据,修改成功返回影响行数,没有修改返回0

    $data = [
        'username' => '李白'
    ];
    $update = Db::name('user')->where('id', 38)->update($data);
    return $update;
  2. 或者使用 data() 方法传入要修改的数组如果两边都传入会合并

    Db::name('user')->where('id', 38)->data($data)->update(['password'=>'456']);
  3. 如果修改数组中包含主键,那么可以直接修改;(不需要写where()链式 )

    $data = [
        'username' => '李白',
        'id' => 38
    ];
    Db::name('user')->update($data);
  4. 使用 inc() 方法可以对字段增值dec() 方法可以对字段减值

    Db::name('user')->inc('price',3)->update($data);    //price+3块, 
    Db::name('user')->dec('price', 3)->update($data);    //price减3块
  5. 增值减值如果同时对一个字段操作前面一个会失效

    Db::name('user')->inc('price')->dec('price', 3)->update($data);    //只把price减3
  6. 使用 exp() 方法可以在字段中使用 mysql 函数

    Db::name('user')->exp('email', 'UPPER(email)')->update($data);    //邮箱转大写
  7. 使用 raw() 方法修改更新,更加容易方便

    $data = [
        'username' => '李白',
        'email' => Db::raw('UPPER(email)'),
        'price' => Db::raw('price - 3'),
        'id' => 38
    ];
    Db::name('user')->update($data);
  8. 使用 setField() 方法可以更新一个字段值

    Db::name('user')->where('id', 38)->setField('username', '辉夜');
  9. 增值 setInc() 和减值 setDec() 也有简单的做法,方便更新一个字段值

    Db::name('user')->where('id', 38)->setInc('price');
  10. 增值和减值如果不指定第二个参数,则步长默认为 1

三. 删除数据

  1. 极简删除delete() 可以根据主键直接删除,删除成功返回影响行数,否则 0;

    Db::name('user')->delete(51);
  2. 根据主键,还可以删除多条记录

    Db::name('user')->delete([48,49,50]);
  3. 正常情况下,通过 where() 方法来删除

    Db::name('user')->where('id', 47)->delete();
  4. 通过 true 参数删除数据表所有数据,我还没测试,大家自行测试下;

    Db::name('user')->delete(true);

四. 查询数据

  1. Db::table() 中 table 必须指定完整数据表(包括前缀);
  2. 如果希望只查询一条数据,可以使用 find()方法;

    Db::table('tp_user')->find();
  3. Db::getLastSql() 方法,可以得到最近一条 SQL 查询的原生语句;

    SELECT * FROM `tp_user` LIMIT 1
  4. 想指定数据查询,可以使用 where() 方法; 没有查询到任何值,则返回 null

    Db::table('tp_user')->where('id', 27)->find()
    //SELECT * FROM `tp_user` WHERE `id` = 27 LIMIT 1
  5. 使用 findOrFail() 方法同样可以查询一条数据,在没有数据时抛出一个异常

    Db::table('tp_user')->where('id', 1)->findOrFail()
  6. 使用 findOrEmpty() 方法也可以查询一条数据,但在没有数据时返回一个空数组

    Db::table('tp_user')->where('id', 1)->findOrEmpty();
  7. 想要获取多列数据,可以使用 select() 方法;

    Db::table('tp_user')->select();
    //SELECT * FROM `tp_user`
  8. 多列数据在查询不到任何数据时返回空数组,使用 selectOrFail() 抛出异常;

    Db::table('tp_user')->where('id', 1)->selectOrFail();
  9. 当在数据库配置文件中设置了前缀,那么我们可以使用 name() 方法忽略前缀

    Db::name('user')->selectOrFail();

五. 更多方法

  1. ThinkPHP 提供了一个助手函数 db,可以更方便的查询;

    \db('user')->select();
  2. 通过 value() 方法,可以查询指定字段的值(单个),没有数据返回 null

    Db::name('user')->where('id', 27)->value('username');
  3. 通过 colunm() 方法,可以查询指定列的值(多个)没有数据返回空数组

    Db::name('user')->column('username');    //返回多行数据
  4. colunm() 方法 ,可以指定 id 作为列值的索引;
Db::name('user')->column('username', 'id');     //  array( array(1=>'小明') , array(2=>'小强'))
  1. 数据分批处理大批数据处理JSON 数据查询,当遇到具体问题再探讨;
0

评论 (0)

取消