配置自动写入时间戳
#查询
//获取单个数据
// $res=User::get(1);
//获取多个数据
// $res = User::all('1,2,3');
// foreach ($res AS $val){
// dump($val->toArray());
// }
//获取指令列的数据,返回值为数组
// $res = User::column('name,age');
// dump($res);
#插入
// $res = User::create([
// 'name'=>'cc',
// 'age'=>13
// ]);
//save()更便捷,返回数组
//allowField(*); 参数为true时,过滤不存在的字段。 参数为存在的字段时,save的数组内只添加该字段的值。
// $userModel = new User;
// $res = $userModel->allowField('name')->save([
// 'name'=>'bb',
// 'age'=>18
// ]);
// dump($res);
//saveAll([])返回对象.
// $userModel = new User;
// $res = $userModel->saveAll([
// ['name' => 'xx']
// ]);
//
// foreach ($res as $val) {
// dump($val->toArray());
// }
#更改
// update();推荐使用
// $userModel = new User;
// $res = $userModel->where('id','>',8)
// ->update(['age'=>10]);
// dump($res);
//save();推荐使用 使用闭包函数function ($query)
// $userModel = new User();
// $res = $userModel->save([
// 'age'=>20
// ],function ($query){
// $query->where('id','>',8);
// });
// dump($res);
<?php
namespace app\index\controller;
use think\Controller;
use think\Db;
class Index extends Controller
{
public function index($name = 'world')
{
$this->assign('name', $name);
$db = db('test');
// $res=Db::name('test')->select();
// 或
// $res=Db::table('test')->select();
// 或
// $res=db('test')->select();
// $res=Db::query('select id , data from tp_5_test');
// select 返回所有记录
// $res=Db::table('tp_5_test')->select();
// $res=Db::table('tp_5_test')->find();
// 返回单个字段数据
// $res=Db::table('tp_5_test')->value('data');
// 返回一组字段数据,可以存在第二个参数,并以第二个参数为Key输出
// $res=Db::table('tp_5_test')->column('data');
// 插入数据 insert();
// insertGetId();此方法运行后,返回主键id
// $res=$db->insertGetId([
// 'name' => 'nono',
// 'data' =>md5('bad')
// ]);
// dump($res);
// $last=db('test')->select();
// dump($last);
// insertAll();插入数组/一组数据,返回插入数据成功的行数
// $data=[];
// for ($i=0;$i<10;$i++){
// $data[]=[
// 'name' =>'yeye'.$i,
// 'data' =>md5('see'.$i)
// ];
// }
// $res=$db->insertAll($data);
// dump($res);
// update() 可以改变多字段信息,返回影响行数
// $res= $db->where([
// 'id'=>1
// ])->update([
// 'name'=>'abc',
// 'data'=>md5('ssss')
// ]);
// setField(); 每次变更一个字段信息,返回影响行数
// $res = $db->where([
// 'id'=>1
// ])->setField('name','qwe');
// setInc(a,b); 每次执行(字段)都自增. 默认不写第二参数自增1,第二参数是多少就自增多少。返回影响行数
// $res=$db->where(['id'=>1])->setInc('num');//+1
// $res=$db->where(['id'=>1])->setInc('num',5);//+5
// setDec(); 每次执行都自减.
// $res=$db->where(['id'=>1])->setDec('num');
// $res=$db->where(['id'=>1])->setDec('num',5);
// delete();不添加where条件时,按主键删除时,直接添加参数即可 例:delete(2);
// $res=$db->delete(2);
#条件构造器,条件信息
/* where() whereOr()
* EQ =
* NEQ <>
* LT <
* ELT <=
* GT >
* EGT >=
* BETWEEN BETWEEN * AND *
* NOTBETWEEN NOTBETWEEN * AND *
* IN IN (*,*)
* NOTIN NOT IN (*,*)
*/
// $sql = $db->where('id','eq',1)->buildSql();
#链式操作
/*
*
* 指定排序 order('id','desc') 或者 order(['id'=>'desc','create_time'=>'desc'])
*
* 指定分页 page(page,listRow); page:页数 , listRow:每页显示行数
*
*
*
*
*/
$res = $db
->field('data,num')
// ->order('id', 'desc')
// ->limit(3,5)
->group("name")
// ->page(1, 5)
->select();
dump($res);
return $this->fetch();
}
// public function dbTest(){
// $data=Db::table('tp_5_test')->select();
// $this->assign('result',$data);
//
// return $this->fetch('dbTest');
// }
}
把数据库完成同一件事的操作放在公共的方法里,在控制器中直接调用。
update 返回影响的行数(同时更新多个字段)
setField返回影响的行数(只更新一个字段)
setInc返回影响的行数(某个字段自增)
setDec返回影响的行数(某个字段自减)
$res= $Db::name('user)->insert(['username'=>'mmm','email'=>'mmm@qq.com']);
insert 返回值是影响记录的行数,插入行。
insertGetId 返回插入数据的自增id
insertAll返回插入数据成功的行数。
每刷新一次就会执行一次insert。
Db::table('biaoming')->select();
有四种查询方式,select(),column()返回多条记录,当不存在时返回空数组,find(),value()返回一条记录,当不存在时,返回null。
1.四种连接方式
修改器,在数据添加的时候可以修改数据
在模型中添加.
$data来自获取的表单数组,set后为表字段名
public function setPasswordAttr($val,$data){
return md5($val.$data['email']);
//return md5($val);
}
controller/Index.php
<?php
namespace app\index\controller;
use think\Controller;
use app\index\model\User;
class Index extends Controller
{
public function index()
{
$res=User::get(2);
dump($res->sex);//输出转换后字段值
dump($res->toArray());//获取到转换后数组
dump($res->getData());//获取原生数组
}
}
model/User.php
<?php
namespace app\index\model;
use think\Model;
classUser extends Model
{
public function getSexAttr(){
switch ($val) {
case '1':
return "男";
break;
case '2':
return "女";
break;
default:
return "未知";
break;
}
}
}
class
Index
extends
Controller{
public
function
index()
{
$res
= User::
count
();
$res
= User::where(
'id'
,
'>'
,
'5'
)->
count
();
$res
= User::max(
'age'
);
$res
= User::where(
'id'
,
'>'
,
'5'
)->
max
('num');
$res
= User::sum(
'age'
);
$res
= User::where(
'id'
,
'>'
,
'5'
)->
sum
('num');
$res
= User::min('age);
$res
= User::avg(
'age'
);
//都可以和第一个一样带条件查询
dump(
$res
);
}
}
namespace app\index\controller;
use think\Controller;
use app\index\model\User;
class Index extends Controller
{
public function index()
{
$res=User::destroy(function($query){
$query->where("id","<",5);
});
$userModel=User::get(7);
$res=$userModel->delete();
$res=User::where("id","<",9)
->delete();
dump($res);
}
}
namespace app\index\controller;
use think\Controlle;
use app\index\model\User;1、2方法需要
//use think\Loader;3引入此类无需上行调用模型,下面可直接载入
class Index extends Controller
{
public function index()
{
//1下面是静态方法,推荐
$res= User::get(2);
//2下面是实例化方式
//$user= new User;
//$res=$user::get(3);
//3下面是直接载入
//$user= Loader::model("User");
//$res= $use::get(4);
//4下面是利用助手函数,此法上面不用引入任何类
//$user= model("User");
//$res=$user::get(6);
$res=$res->toArray();
dump($res);
}
}
where("id",">",10)
field("username,id")
order("id desc")
limit(3,5)//从第三条开始,取5条
page(3,5)//从第三页开始,取5条
select()
whereOr是OR关系
buildSql();输出查询语句
$db->delete(2)返回影响行数。如果ID是主键,直接删除id=2的值;也可前面加where条件。
update返回影响的行数,可更新多字段
setField返回影响的行数,每次更新一个字段
setInc返回影响的行数,不加第二参数每次加1,加参数则每次加参数值
setDec返回影响的行数,不加第二参数每次减1,加参数则每次减参数值
insertAll多条插入返回插入数据成功的行数
insert返回值是影响记录的行数,即插入数
insert返回值是影响记录的行数,即插入数
insertGetId返回插入数据的自增ID
insertAll返回插入数据成功的行数
Db::table('imooc_user')->find();每次不需要实例化
db('user')-find();每次调用会实例化
db('user',[],false)-find();添加第三个参数false就不会每次调用实例化
Db::name('user')->select();
Db::table('imooc_user')->find();
两者都返回二维数组
value返回一条记录,并且是这条记录的某个字段值;
如果结果不存在,返回NULL。
column返回一个一维数组,数组中的value值就是我们要获取的列的值;
如果存在第二个参数,就返回这个数组并且用第二个参数的值作为数组的key值。
如果不存在,返回空数组。
select返回所有记录,返回的结果是一个二维数组;
如果结果不存在,返回一个空数组。
find返回一条记录,返回的结果是一个一位数组(本期讲解中截图有错,下一期视频有更正);
如果结果不存在,返回NULL.
Db类连接
// model 直接使用
// dump(Name::get(11)->toArray());
// 实例化操作
// $res = new Name;
// dump($res::get(11)->toArray());
// Loader查询
// dump(Loader::model("Name")::get(11)->toArray());
// 助手函数model
// dump(model("Name")::get(11)->toArray());
// ::get(function($query){});
// $res = Name::get(function($query){ //返回一条信息
// $query->where(['money'=>['EGT',5000]]);
// })->toArray();;
// $res = Name::where("id",11)->field("id,name")->find()->toArray();
// $res = Name::all(function($query){ // return $res ;
// $query->where(["money"=>['>=',5000]])->field("name");
// });
// $res = Name::column("name"); //查询单独一列
// 添加数据
// $res = Name::create(["name"=>"小猛","age"=>"22"]); // return $res ;
// $res = Name::create(["name"=>"小贺","age"=>"22","money"=>70000,"else"=>true],true); // return $res ;
//实例化模型添加数据 save 返回影响行数
// $name = new Name;
// $name->name = "小晨";
// $name->age = 78;
// $name->money = 980;
// $res = $name->save();
// saveAll增加数据
// $name = new Name;
// $res = $name->saveAll([
// ["name"=>"小煜","age"=>"88","money"=>800000],
// ["name"=>"小飞","age"=>"68","money"=>300000]
// ]);
// save过滤不存在的字段
// $name = new Name;
// $res = $name->allowField(true)->save(["name"=>"小熙","age"=>"35","money"=>300000,"dieday"=>35]);
// save只添加姓名和年龄字段 //返回影响行数
// $name = new Name;
// $res = $name->allowField(["name","age"])->save(["name"=>"小宋","age"=>"15","money"=>300000,"dieday"=>35]);
// $res = Db::table("tb_name")->select(); //输出所有信息
// $res = Db::table("tb_name")->find(2); //输出一条信息
// $res = Db::table("tb_name")->value("name"); //输出第一条信息的name字段
// $res = Db::table("tb_name")->column("name"); //输出字段名为name的所有信息
// $res = Db::table("tb_name")->where("name","小赵")->select(); //输出name为小赵的信息
// $res = Db::table("tb_name")->where(['age'=>['LT',20]])->select(); //输出age小于20岁的信息
// $res = db("name")->where(['age'=>['LT',20]])->select(); //输出age小于20岁的信息
// $res = Db::name("name")->insert(['name'=>'小陈','age'=>29,'money'=>500000]); //插入一条信息 返回影响行数
// $res = db("name")->insertGetId(['name'=>'小杨','age'=>22,'money'=>800000]); //输出age小于20岁的信息 返回id值 不能被select
// $arr = [
// ['name'=>'小橙','age'=>18,'money'=>5],
// ['name'=>'小昊','age'=>18,'money'=>5],
// ['name'=>'小菌','age'=>18,'money'=>5]
// ];
// $res = db("name")->insertAll($arr); // 返回影响行数
// $res = db("name")->where(["age"=>['=',8]])->update(["age"=>"60"]); // 返回影响行数
// $res = db("name")->where(["id"=>['=',2]])->update(["age"=>20,"money"=>7000000]); // 返回影响行数
// $res = db("name")->where(["age"=>['=',15]])->setField(["age"=>"60"]); // 返回影响行数
// $res = db("name")->where(['name'=>['=','小任']])->setInc("age",50); // 返回影响行数
// $res = db("name")->where(['name'=>['=','小任']])->setDec("age",50); // 返回影响行数
// $res = db("name")->where(['money'=>['=',5]])->delete(); // 返回影响行数
//清空数据表的方法
// $res = db("name")->where("1=1")->delete(); // 返回影响行数
// $res = db("name")->where(["age"=>['in','17,18,19,20']])->select(); // 返回数据列
// $res = db("name")->where("age","EXP",'in (19,20)')->select(); // 返回数据列
// $res = db("name")->where(["money"=>["EGT",5000]])->order("money DESC")->field('money')->select();; // 返回数据列
// $res = db("name")->page(2,2)->select(); //
select返回一个二维数组,如果结果不存在,返回空数组
find返回一维数组,如果结果不存在,返回null指
value返回一条记录,值为某个字段值,如果结果不存在,返回null指
column返回一维数组,得到的指就是我们要的指,如果存在第二个参数,就返回这个数组,并且值为第二个参数