-
Model的使用方法
use app\模块\model\模型类名
1、$res = 模型类名::get(1);
2、$user = new 模型类名;
$res = $user::get(1);
3、使用Loader
use think\Loader;
$user = Loader::model('模型类名');
$res = $user::get(1);
4、助手函数
$user = model('模型类名');
$res = $user::get(1);
查看全部 -
thinkphp定义model非常方便,只需要在app/index下新建model文件夹,同时以数据表的名称命名.php文件,引入model类,即可定义。
model的命名规范:一般model的名字和表名是对应的,例如 表名为imooc_user->模型名User.php 表名imooc_user_info->模型名UserInfo.php
一般一个表对应一个model类,model类里面是对这个表的增删改查的各种操作查看全部 -
常用链式操作
原理:Db类的链式方法返回Db对象,可以继续使用Db对象的这些方法对查询数据进行一些条件构造以及范围的选择和排序等等;
$res=$db
->where('id','>',5) 条件ID>5
->field('username','id') 只搜索username和id两个字段
->order('id DESC') order排序 id DESC id倒序
->limit(3,7) limit截取 3,7 从3开始截取7个
->page(3,5) page(m,n)多用于分页//limit分页limit((m-1)*n,n)== m:当前页数,n:每页多少条数据
->group('`group`') //group是关键字,这里用``进行转义
->select(); select( ); 搜索
var_dump($res);
注意:order对group是不起作用的;就是在执行的group进行分组的时候,并不是在你order排序的基础上进行的;
group('字段'),他会根据字段的值为分类标准进行分类,比如字段值为1的单独查出来,字段值为1的单独查出来;
查看全部 -
数组的方式可以给 值的数组的第一个参数设置条件结构 where(['id' => ['LT',5]])等同于where('id<5')
也可以同时有两个查询条件,看截图查看全部 -
$db = Db::name('user'); #备注信息 #EQ = #NEQ <> #LT < #ELT <= #$GT > #EGT >= #BETWEEN BETWEEN * AND * #NOTBETWEEN NOTBETWEEN * AND * #IN IN (*,*) #NOTIN NOT IN (*,*) $sql = $db->where("id", "in","1,2,3") ->whereOr("username", "eq", "17771258") ->whereOr("num", 'lt', "10") ->where("email","17771258@qq.com") ->buildSql(); dump($sql);
查看全部 -
删除:
delete(' ');函数 删除 没有条件是不会执行操作的
#delete('') 返回影像记录的行数 加where()条件,或者delete(''主键的值);
$res=$db->where(['id'=>2])->delete();
$res=$db->delete(1);括号里是主键id的值;
如果where("1=1")的话会删除所有记录(慎用)只要where每次接收到的是true就可以;就会全部删除
$res=$db->where("1=1")->delete( );
查看全部 -
update(' ');函数 语法 更新数据
$res=$db->where(['id'=>几几几])->update(['字段名'=>'更新内容']); var_dump('res');
update(' '); 返回影像行数
setField(' ')函数 语法 更新某一条数据
$res=$db->where(['id'=>几几几])->setField(['字段名'=>'更新内容']); var_dump('res');
setField(' '); 返回影像行数,每次只更新一个字段
setInc(' ')函数 语法 数量+1
$res=$db->where(['id'=>几几几])-setInc('num'); var_dump('res');
#setInc('某个字段') 返回影像行数,每执行一次,都加1 通常用于新闻浏览数
setDec(' ')函数 语法 数量-1
$res=$db->where(['id'=>几几几])-setDec('num'); var_dump('res');
#setInc('某个字段') 返回影像行数,每执行一次,都减1 通常用于新闻浏览数
查看全部 -
$db = Db::name('user'); #insert 返回值是影响记录的行数,插入数 #insetGetId 返回值插入数据的自增id #insertAll 返回插入数据成功的行数 // $res = $db->insert([ // 'email' => 'imooc_02', // 'password' => md5('imooc_02'), // 'username' => 'imooc_02' // ]); // $res = $db->insertGetId([ // 'email' => 'imooc_03@qq.com', // 'password' => md5('imooc_03'), // 'username' => 'imooc_03' // ]); $data = []; for($i=10; $i<20; $i++) { $data[] = [ 'email' => "imooc_03_{$i}@qq.com", 'password' => md5("imooc_03_{$i}"), 'username' => "imooc_03_{$i}" ]; } $res = $db->insertAll($data); dump($res);
查看全部 -
#使用sql语句方式查询数据库
//$res = Db::query("select *from imooc_user where id=?",[1]);
$res =Db::execute("insert into imooc_user set username=?,password?,email=?",['imooc',md5('imooc'),'imooc@qq.com']);
#selsect 返回所有记录 返回的结果是一个二维数组
#如果结果不存在 返回一个空数组
$res = Db::table('imooc_user')->select();
#find 返回一条记录 返回的结果是一个二维数组
#如果结果不存在返回NULL
$res = Db::table('imooc_user')->where(['id'=>10])->find();
#value 返回一条记录 并且是每条记录的某个字段值
#如果结果不存在 返回NULL
$res = Db::table('imooc_user')->value('username');
#column 返回一个一维数组 数组中的value值就是我们要获取的列的值
#如果存在第二个参数 就返回这个数组并且用第二个参数的值作为key值
#如果不存在返回NULL
$res = Db::table('imooc_user')->column('username');
#find 返回一条记录 返回的结果是一个二维数组
#如果结果不存在 返回NULL
$res = Db::table('imooc_user')->find();
#value 返回一条记录 并且是字条记录的某个字段值
#如果结果不存在 返回NULL
$res = Db::table('imooc_user')->value('username');
$res = Db::name('user')->select();
实例化
$res = db('user',[],false)->find();
查看全部 -
修改数据库配置的四种方式
1.可在config下的database.php返回配置信息,直接 Db::connect()(如果参数为空,那么会默认使用database.php中的配置连接)
2.在方法里面引入 use think\Db;Db::connect(array);数组即数据库连接配置
3.同样是Db::connect("mysql://root:password@127.0.0.1:3306:/databasename#utf8"); //use think\Db
4.在配置文件中,添加一个数组,Db::connect("数组键名");
//use think\Db查看全部 -
Db::方法 因为是单例模式 不会重复实例化 而用db驻守函数会每次实例化,消耗内存,所以在后面加上false,这样db('表名',[],false)就不会每次实例化了
查看全部 -
dsn方式连接数据库 此方式优先级高于单独写的方式
Db::connect('dsn');
此时只是配置数据库 并没有链接
只有用刀query时才是链接数据库
查看全部 -
全局添加更新时间需要在表中新建create_time和update_time字段,配置文件中设置“auto_timestamp"=>true,一般不开启这个功能,否则表中不存在该字段时会报错,真正删除需要把destroy方法或delete方法的第二个参数设置为true
use think\Model; use traits\model\SoftDelete; class User extends Model{ use SoftDelete;使用软删除 protected $autoWriteTimestamp = true;//开启自动更新时间 protected $createTime = false;//设置为false代表不使用创建时间 protected $updateTime = "update_at";//设置自定义更新时间的字段 protected $deleteTime = "delete_at";//设置自定义的软删除字段 }
查看全部 -
<?php namespace app\index\model; use think\Model; class User extends Model{ protected $auto = [ 'time' ]; protected $insert = [ 'time_insert' ]; protected $update = [ 'time_update' ]; public function setPasswordAttr($val,$data){ //第二个参数是数组数据 return $val.$data['email']; return md5($val); } public function setTimeAttr(){ return time(); } public function setTimeInsertAttr(){ return time(); } public function setTimeUpdateAttr(){ return time(); } }
查看全部 -
可以在控制器里输出模型定义好的内容
查看全部
举报