thinkPHP5数据删除语法

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


最终生成的SQL语句可能是:

DELETE FROM think_user WHERE id = 1
DELETE FROM think_user WHERE id IN (1,2,3)
DELETE FROM think_user WHERE id = 1
DELETE FROM think_user WHERE id < 10



通过上面可以看出,无论TP的删除语法是什么样的,都是 通过PHP原生语句转化来的;

标签: thinkphp

Thinkphp 发布于 2021-11-17 13:46

thinkphp常用积分增加setInc减少setDec用法

今天给客户做一个网络网站,用到了用户积分管理,经常用到thinkphp的积分加减法,感觉thinkphp的累加蛮方便的,用的setInc、setDec方法
thinkphp3.0增加setInc、setDec方法,今天查看thinkphp2.0的方法setInc、setDec时是这样写的:

而对于统计字段(通常指的是数字类型)的更新,系统还提供了 setInc 和 setDec 方法:

$User = M( "User" ); // 实例化 User 对象

$User->setInc( 'score','id=5',3 ); // 用户的积分加 3

$User->setInc( 'score','id=5' ); // 用户的积分加 1

$User->setDec( 'score','id=5',5 ); // 用户的积分减 5

$User->setDec( 'score','id=5' ); // 用户的积分减 1

而tp3.0有了新的改动,这样写了,方便了不少:

必须配合连贯操作where一起使用
$User = M("User"); // 实例化User对象
$User->where('id=5')->setInc('score',3); // 用户的积分加3
$User->where('id=5')->setInc('score'); // 用户的积分加1
$User->where('id=5')->setDec('score',5); // 用户的积分减5
$User->where('id=5')->setDec('score'); // 用户的积分减1


Thinkphp 发布于 2021-11-17 13:41

thinkphp5中进行联表查询

use think\Db;

$map['a.id'] = input('id');
$info = Db::table('table1_name')
->alias('a')
->join('table2_name w','a.id = w.id')
->where($map)
->find();

注意:这里如果两个表的联表查询的字段名称一样,需要在查询条件map里指定表名,否则会报错!比如这里的map[‘a.id’],不能写map[‘id’];


Thinkphp 发布于 2021-11-17 13:40

thinkphp5 数据增加语法

使用 Db 类的 insert 方法向数据库提交数据

$data = ['foo' => 'bar', 'bar' => 'foo'];

Db::table('think_user')->insert($data);

从上面可以看出,直接使用Db的方法,讲$data 进行数据的写入!

添加数据后如果需要返回新增数据的自增主键,可以使用getLastInsID方法:

Db::name('user')->insert($data);
$userId = Db::name('user')->getLastInsID();

或者直接使用insertGetId方法新增数据并返回主键值:

Db::name('user')->insertGetId($data);

添加多条数据直接向 Db 类的 insertAll 方法传入需要添加的数据即可

$data = [
['foo' => 'bar', 'bar' => 'foo'],
['foo' => 'bar1', 'bar' => 'foo1'],
['foo' => 'bar2', 'bar' => 'foo2']
];
Db::name('user')->insertAll ($data);

标签: thinkphp

Thinkphp 发布于 2021-11-17 13:36

thinkphp5.1的目录结构

相对于5.0来说,5.1版本目录结构的主要变化是配置目录和路由定义目录独立出来,不再放入应用类库目录(并且不可更改)!

www WEB部署目录(或者子目录)
├─application 应用目录
│ ├─common 公共模块目录(可以更改)
│ ├─module_name 模块目录
│ │ ├─common.php 模块函数文件
│ │ ├─controller 控制器目录
│ │ ├─model 模型目录
│ │ ├─view 视图目录
│ │ ├─config 配置目录
│ │ └─ ... 更多类库目录
│ │
│ ├─command.php 命令行定义文件
│ ├─common.php 公共函数文件
│ └─tags.php 应用行为扩展定义文件

├─config 应用配置目录
│ ├─module_name 模块配置目录
│ │ ├─database.php 数据库配置
│ │ ├─cache 缓存配置
│ │ └─ ...
│ │
│ ├─app.php 应用配置
│ ├─cache.php 缓存配置
│ ├─cookie.php Cookie配置
│ ├─database.php 数据库配置
│ ├─log.php 日志配置
│ ├─session.php Session配置
│ ├─template.php 模板引擎配置
│ └─trace.php Trace配置

├─route 路由定义目录
│ ├─route.php 路由定义
│ └─... 更多

├─public WEB目录(对外访问目录)
│ ├─index.php 入口文件
│ ├─router.php 快速测试文件
│ └─.htaccess 用于apache的重写

├─thinkphp 框架系统目录
│ ├─lang 语言文件目录
│ ├─library 框架类库目录
│ │ ├─think Think类库包目录
│ │ └─traits 系统Trait目录
│ │
│ ├─tpl 系统模板目录
│ ├─base.php 基础定义文件
│ ├─convention.php 框架惯例配置文件
│ ├─helper.php 助手函数文件
│ └─logo.png 框架LOGO文件

├─extend 扩展类库目录
├─runtime 应用的运行时目录(可写,可定制)
├─vendor 第三方类库目录(Composer依赖库)
├─build.php 自动生成定义文件(参考)
├─composer.json composer 定义文件
├─LICENSE.txt 授权说明文件
├─README.md README 文件
├─think 命令行入口文件

标签: thinkphp

Thinkphp 发布于 2021-11-17 13:35

thinkphp5模板渲染

下面是一个最典型的用法,不带任何参数:

// 不带任何参数 自动定位当前操作的模板文件

return $this->fetch();

表示系统会按照默认规则自动定位模板文件,其规则是:

当前模块/默认视图目录/当前控制器(小写)/当前操作(小写).html

如果没有按照模板定义规则来定义模板文件(或者需要调用其他控制器下面的某个模板),可以使用:

// 指定模板输出
return $this->fetch('edit');
表示调用当前控制器下面的edit模板

return $this->fetch('member/read');

表示调用Member控制器下面的read模板。

标签: thinkphp

Thinkphp 发布于 2021-11-17 11:58

TP5简单的注册执行

public function Udengzc() //注册执行
{
$usersinfo = input();

$data['useremails'] = input('post.useremails'); //定义个获取邮箱的变量

$usersif = Db::name('users')->where($data )->find();//查询

if(count($usersif) >1 ){
$this->error('抱歉,您的注册邮箱已经存在!请重新注册!');
exit;
}

if(!input('post.useremails') || !input('post.usertel') ){
header("Content-Type: text/html;charset=utf-8");
echo "<script> alert('抱歉,您还有注册信息没填写哦!');parent.location.href='../Index'; </script>";
// $this->error('抱歉,注册用户名、密码、邮箱不能为空!');
exit;
}

Db::table('users')->insert($usersinfo);
echo "<script> alert('注册成功,请重新登录!');parent.location.href='../Index'; </script>";

}

Thinkphp 发布于 2021-11-17 11:56

TP5简单的登录执行

视图部分

 <form action="__URL__/Udenglu" method="post" enctype="multipart/form-data">
<input name="action" value="login" type="hidden">
<input name="useremails" placeholder="登录邮箱" required="" type="text">
<hr class="hr15">
<input name="userpaswords" placeholder="密码" required="" type="password">
<hr class="hr15">
<input value="登录" style="width:100%;" type="submit">
<hr class="hr20">
帮助 <a onClick="alert('请联系管理员')">忘记密码</a> 
</form>

php部分

public function Udenglu()//登录执行

{
    $usersif = Db::name('users')->where(['useremails'=>input('post.useremails'),'userpaswords'=>input('post.userpaswords')]  )->find();

if(count($usersif) < 1 ){
    $this->error('抱歉,您的登录邮箱不存在或者错误,请重新登录!');
    exit;
}else{
Session::set('uid',$usersif['Id']);
Session::set('usernames',$usersif['usernames']);
Session::set('useremails',$usersif['useremails']);
或者
session('user',$usersif)

$this->success('登录成功', '__ROOT__/member/Index/');
        }

}

需要注意的是: Session 会话,得放进去

标签: thinkphp

Thinkphp 发布于 2021-11-17 11:52

_initialize__construct

加上这个。直接访问控制器的时候是先执行这个函数里面的代码,然后再去执行别的函数的代码

construct()是php内置的构造函数,initialize()是php框架中定义的(如thinkphp),用法基本一致。

在tp中若父类和子类都有_initialize,则只调用子类的_initialize,并不会自动调用父类_initialize

而子类的construct方法如果要调用父类的construct方法,必须在子类构造函数显示调用parent::__construct();

_initialize()是ThinkPHP定义的控制器初始化函数。功能类似于php原生的construct。
网上很多人说用_initialize就可以不用写parent::__construct了,这种说话是不对的。
只有当你的控制器继承了think\Controller时,你可以直接在控制器中使用_initialize(),此时会执行父类的
construct和当前类的_initialize。
当你的控制器是作为think\Controller的子类的子类时,只会执行think\Controller的__construct和当前类的_initialize,并不会执行父类的_initialize,所以此时还是需要加parent::_initialize这句才行。

其实think\Controller只是在__construct中加了一句:$this->_initialize()而已。

标签: thinkphp

Thinkphp 发布于 2021-11-17 11:51

tp会话继承判断

BASE

admin

index

标签: thinkphp

Thinkphp 发布于 2021-11-17 11:47