tp3.x和tp5.0的区别

助手函数

5.0助手函数和3.2版本的单字母函数对比如下:

3.2版本 5.0版本
C config
E exception
G debug
L lang
T 废除
I input
N 废除
D model
M db
A controller
R action
B 废除
U url
W widget
S cache
F 废除

常量

5.0版本废弃了原来的大部分常量定义,仅仅保留了框架的路径常量定义,其余的常量可以使用App类或者Request类的相关属性或者方法来完成,或者自己重新定义需要的常量。
废除的常量包括:
 

REQUEST_METHOD
IS_GET IS_POST
IS_PUT、IS_DELETE
IS_AJAX __EXT__
COMMON_MODULE 
MODULE_NAME
CONTROLLER_NAME
ACTION_NAME
APP_NAMESPACE
APP_DEBUG
MODULE_PATH

当然一些常用的常量可以自己定义,如定义路径常量

在application/config.php,或者在模块下新建一个config.php。

 return [
        'view_replace_str' =>[
            '__HOME__' => '/static/home',
        ]
    ];

我们还是可以方便的引入和替换一些css,js 文件

标签

tp5.0标签默认使用{ },3.2是< >,变量输出使用普通标签就足够了,但是要完成其他的控制、循环和判断功能,就需要借助模板引擎的标签库功能了,系统内置标签库的所有标签无需引入标签库即可直接使用。

内置标签包括:

标签名     作用     包含属性
include     包含外部模板文件(闭合)     file
load     导入资源文件(闭合 包括js css import别名)     file,href,type,value,basepath
volist     循环数组数据输出     name,id,offset,length,key,mod
foreach     数组或对象遍历输出     name,item,key
for     For循环数据输出     name,from,to,before,step
switch     分支判断输出     name
case     分支判断输出(必须和switch配套使用)     value,break
default     默认情况输出(闭合 必须和switch配套使用)     无
compare     比较输出(包括eq neq lt gt egt elt heq nheq等别名)     name,value,type
range     范围判断输出(包括in notin between notbetween别名)     name,value,type
present     判断是否赋值     name
notpresent     判断是否尚未赋值     name
empty     判断数据是否为空     name
notempty     判断数据是否不为空     name
defined     判断常量是否定义     name
notdefined     判断常量是否未定义     name
define     常量定义(闭合)     name,value
assign     变量赋值(闭合)     name,value
if     条件判断输出     condition
elseif     条件判断输出(闭合 必须和if标签配套使用)     condition
else     条件不成立输出(闭合 可用于其他标签)     无
php     使用php代码     无

在控制器中正确的输出模板

如果你继承think\Controller的话,可以使用:

return $this->fetch('index/hello');

如果你的控制器没有继承 think\Controller的话,使用:

return view('index/hello');

数据库操作(tp5)

查询

完整数据表名:

Db::table('think_user')->where('id',1)->find();
Db::table('think_user')->where('status',1)->select();

 设置了数据表前缀:

Db::name('user')->where('id',1)->find();
Db::name('user')->where('status',1)->select();

 助手函数

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();

上面的方式会使用同一个数据库连接,第二个参数为数据库的连接参数,留空表示采用数据库配置文件的配置。

 值和列查询

Db::table('think_user')->where('id',1)->value('name');//查询某个字段的值

Db::table('think_user')->where('status',1)->column('name');//返回某一列的值,数组
Db::table('think_user')->where('status',1)->column('name','id');//指定索引
Db::table('think_user')->where('status',1)->column('id,name');//同tp3的getField

使用Query对象或闭包查询

//使用查询对象查询
$query = new \think\db\Query();
$query->table('think_user')->where('status',1);
Db::find($query);
Db::select($query);
//使用闭包函数查询
Db::select(function($query) {
    $query->table('think_user')->where('status',1);
});

 数据批量处理

//每次处理 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;
});

//调用其他方法
Db::table('think_user')->where('score','>',80)->chunk(100, function($users) {
    foreach ($users AS $user) {
        //
    }
});

//chunk方法默认根据主键查询,支持指定字段
Db::table('think_user')->chunk(100, function($users) {
    return false;
}, 'create_time');

//指定处理数据的顺序
Db::table('think_user')->chunk(100, function($users) {
    return false;
}, 'create_time', 'desc');

JSON类型数据查询

//查询JSON类型字段(info字段为json类型)
Db::table('think_user')->where('info$.email','[email protected]')->find();

主从查询

$data = ['foo' => 'bar', 'bar' => 'foo'];
Db::table('think_user')->insert($data);
Db::name('user')->master()->where('id',1)->find();//从主库读取数据

//在数据库配置文件中增加下面的配置参数:
'read_master' => true;

//只对某个表进行操作
$data = ['foo' => 'bar', 'bar' => 'foo'];
Db::table('think_user')->readMaster()->insert($data);

//让后续所有数据表的查询都走主库
$data = ['foo' => 'bar', 'bar' => 'foo'];
Db::table('think_user')->readMaster(true)->insert($data);

添加数据

Db::table('think_user')->insert($data);//没有设置数据表前缀
Db::name('user')->insert($data);//设置了表前缀


//返回新增数据的自增主键
Db::name('user')->insert($data);
$userId = Db::name('user')->getLasetInsID();

//直接使用insertGetId方法新增数据并返回主键值
Db::name('user')->insertGetId($data);

//添加多条数据
$data = [
    ['foo' => 'bar', 'bar' => 'foo'],
    ['foo' => 'bae', 'bae' => 'foi'],
];
Db::name('user')->insertAll($data);

//快捷更新方法data,配合insert使用
Db::table('data')->data(['name' => 'tp', 'score' => 100])->insert();

更新数据

Db::table('think_user')->where('id',1)->update(['name' => 'thinkphp']);
Db::table('think_user')->update(['name' => 'thinkphp', 'id' => 1]);

//更新数据中需要使用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');

//自增或自减一个字段的值
//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);

 V5.0.18+版本开始是数组中使用exp查询和更新的话,必须改成下面的方式:

Db::table('think_user')
    ->where('id', 1)
    ->update([
        'login_time'  => Db::raw('now()'),
        'login_times' => Db::raw('login_times+1'),
    ]);

 延迟更新

//setInc/setDec支持延时更新,如果需要延时更新则传入第三个参数
Db::table('think_user')->where('id',1)->setInc('score',1,10);//延时10秒,,,返回影响的条数

 快捷更新(V5.0.5+以上版本封装的dataincdecexp方法属于链式操作方法,可以配合update使用(官方推荐用法)。

下面举个例子说明用法:

Db::table('data')
    ->where('id',1)
    ->inc('read')
    ->dec('score',3)
    ->exp('name','UPPER(name)')
    ->update();

删除数据

//根据主键删除
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();

查询方法

 where方法

Db::table('think')
->where('name','like','%thinkphp')
->where('status',1)
->find();


//多字段相同条件的AND查询
Db::table('think')
->where('name&title','like','%thinkphp')
->find();

 whereOr方法

Db::table('think')
->where('name','like','%thinkphp')
->whereOr('title','like','%thinkphp')
->find();

//多字段相同条件的OR查询简化
Db::table('think')
->where('name|title','like','%thinkphp')
->find();

混合查询

$res = Db::table('think')->where(function($query) {
    $query->where('id', 1)->whereOr('id',2);
})->whereOr(function($query) {
    $query->where('name','like','think')->whereOr('name','like','thinkphp');
})->select();

//生成的sql语句如下
SELECT * FROM `think_user` WHERE  (  `id` = 1 OR `id` = 2 ) OR (  `name` LIKE 'think' OR `name` LIKE 'thinkphp' )

 getTableInfo方法

// 获取`think_user`表所有信息
Db::getTableInfo('think_user');
// 获取`think_user`表所有字段
Db::getTableInfo('think_user', 'fields');
// 获取`think_user`表所有字段的类型
Db::getTableInfo('think_user', 'type');
// 获取`think_user`表的主键
Db::getTableInfo('think_user', 'pk');

 

 

 


后续更新。。。。。

猜你喜欢

转载自blog.csdn.net/qq_42176520/article/details/86468625
今日推荐