ThinkPHPV5.0.3 – 3

数据库操作,数据库操作对于接口来说是比较重要的一点,一般用PHP操作模式都清楚,但是Think封装了好多方法或者类,供数据库操作。

配置数据库,在database.php里边,例如数据库地址,用户名,密码,表名儿前缀等。

然后在当前控制器引用Db库。

use think\Db;

//插入数据,结果是INT,当前操作后改变的记录数
//$result = Db::execute(‘insert into we_ad values (NULL,60,1,”东软培训”,”thinkphp.com”,1,NULL)’); or
//Db::execute(‘insert into think_user (id, name) values (?, ?)’,[8,’thinkphp’]);
//更新数据,结果是INT
//$result = Db::execute(‘update we_ad set keyword = “迎新晚会” where id = 23′);
//查询数据,结果是数组
//$result = Db::query(‘select * from we_ad’);
//or $result = Db::query(‘select * from we_ad where id=?’,[13]);
//print_r($result);
//删除数据,结果是INT
//$result = Db::execute(‘delete from we_ad where id in(22,23)’);
//查询we_ad表中的第一条数据
//$result = Db::table(‘we_ad’)->find();
//等价于:如果在配置文件中设置了表前缀
//$result = Db::name(‘ad’)->find();
//条件查询
//$result = Db::name(‘ad’)->where(‘id’,17)->find();
//查询表中所有数据
//$result = Db::name(‘ad’)->select();
//查询表中符合条件的所有数据
//$result = Db::name(‘ad’)->where(‘state’,1)->select();
//查询某个字段的值,返回值的类型是字段的类型
//$result = Db::table(‘we_ad’)->where(‘id’,13)->value(‘ad_url’);
//查询某一列的值,返回值是数组,column 方法查询结果不存在,返回空数组
$result = Db::table(‘we_ad’)->column(‘ad_url’);

默认情况下,find和select方法返回的都是数组。

一,查询。

以下引用开发手册里边的教程:

助手函数
 
系统提供了一个db助手函数,可以更方便的查询:
 
db('user')->where('id',1)->find();
db('user')->where('status',1)->select();
注意:使用db助手函数默认每次都会重新连接数据库,而使用Db::name或者Db::table方法的话都是单例的。db函数如果需要采用相同的链接,可以传入第三个参数,例如:
 
db('user',[],false)->where('id',1)->find();
db('user',[],false)->where('status',1)->select();
上面的方式会使用同一个数据库连接,第二个参数为数据库的连接参数,留空表示采用数据库配置文件的配置。
数据集分批处理
如果你需要处理成千上百条数据库记录,可以考虑使用chunk方法,该方法一次获取结果集的一小块,然后填充每一小块数据到要处理的闭包,该方法在编写处理大量数据库记录的时候非常有用。
比如,我们可以全部用户表数据进行分批处理,每次处理 100 个用户记录:
Db::table('think_user')->chunk(100, function($users) {
    foreach ($users as $user) {
        //
    }
});
// 或者交给回调方法myUserIterator处理
Db::table('think_user')->chunk(100, 'myUserIterator');
你可以通过从闭包函数中返回false来中止对数据集的处理:
Db::table('think_user')->chunk(100, function($users) {
    // 处理结果集...
    return false;
});
也支持在chunk方法之前调用其它的查询方法,例如:
Db::table('think_user')->where('score','>',80)->chunk(100, function($users) {
    foreach ($users as $user) {
        //
    }
});

其他复杂查询查看:http://www.kancloud.cn/manual/thinkphp5/135181  例如模糊搜索等。

二,添加。

$data = ['colu_id' => 61, 'state' => 1,'keyword' => '广告测试','ad_url' => 'http://www.iahes.com/','rank' => 1];
$result = Db::table('we_ad')->insert($data);
echo $result;
$result返回添加成功的条数,insert 正常情况返回 1。
$result = Db::table('we_ad')->insert($data);
等同于,不同的是name方式是指定了表前缀。
$result = Db::name('ad')->insert($data);
获取当前插入列的主键:data是要插入的数据,数组类型,同上
$result = Db::name('ad')->insert($data);
$userId = Db::name('ad')->getLastInsID();
或者可以浓缩成一句:
$userId = Db::name(‘ad’)->insertGetId($data);
插入多条数据:
 $data = [
                ['colu_id' => 63, 'state' => 1,'keyword' => '广告测试1','ad_url' => 'http://www.iahes.com/','rank' => 1],
                ['colu_id' => 64, 'state' => 1,'keyword' => '广告测试2','ad_url' => 'http://www.iahes.com/','rank' => 1],
                ['colu_id' => 65, 'state' => 1,'keyword' => '广告测试3','ad_url' => 'http://www.iahes.com/','rank' => 1],
                ];
        $result = Db::name('ad')->insertAll($data);
        echo $result;
        //insertAll 方法添加数据成功返回添加成功的条数

三,更新。

更新数据表中的数据
 
Db::table('think_user')
    ->where('id', 1)
    ->update(['name' => 'thinkphp']);
如果数据中包含主键,可以直接使用:
 
Db::table('think_user')
    ->update(['name' => 'thinkphp','id'=>1]);
update 方法返回影响数据的条数,没修改任何数据返回 0
如果要更新的数据需要使用SQL函数或者其它字段,可以使用下面的方式:
 
Db::table('think_user')
    ->where('id', 1)
    ->update([
        'login_time'  => ['exp','now()'],
        'login_times' => ['exp','login_times+1'],
    ]);
更新某个字段的值:
 
Db::table('think_user')
    ->where('id',1)
    ->setField('name', 'thinkphp');
setField 方法返回影响数据的条数,没修改任何数据字段返回 0
自增或自减一个字段的值
 
setInc/setDec 如不加第二个参数,默认值为1
 
// score 字段加 1
Db::table('think_user')
    ->where('id', 1)
    ->setInc('score');
// score 字段加 5
Db::table('think_user')
    ->where('id', 1)
    ->setInc('score', 5);
// score 字段减 1
Db::table('think_user')
    ->where('id', 1)
    ->setDec('score');
// score 字段减 5
Db::table('think_user')
    ->where('id', 1)
    ->setDec('score', 5);
延迟更新
 
setInc/setDec支持延时更新,如果需要延时更新则传入第三个参数
下例中延时10秒,给score字段增加1
 
Db::table('think_user')->where('id', 1)->setInc('score', 1, 10);
setInc/setDec 方法返回影响数据的条数

四,删除。

删除数据表中的数据
 
// 根据主键删除
Db::table('think_user')->delete(1);
Db::table('think_user')->delete([1,2,3]);
 
// 条件删除    
Db::table('think_user')->where('id',1)->delete();
Db::table('think_user')->where('id','<',10)->delete();
delete 方法返回影响数据的条数,没有删除返回 0

———分页查询和排序———

$result = Db::name('ad')->where('state=1')->order('id desc')->limit('2,1')->select();
echo (json($result)->getContent());

主要运用:http://www.kancloud.cn/manual/thinkphp5/135180

Leave a Reply

Required fields are marked *