# ThinkPHP

ThinkPHP6 帮助文档 (opens new window)

# 配置环境

# 配置 Composer

Composer 是 PHP 包管理工具

将 composer.bat 、composer.phar 放置于 php.exe 同目录内,并将此目录增加环境变量

# 设置淘宝镜像

composer config -g repo.packagist composer https://mirrors.aliyun.com/composer/

# 创建项目

# 创建

composer create-project topthink/think 项目路径

# 更新

composer update topthink/framework

# 运行

执行php think run后打开127.0.0.1:8000

# 开启调试模式

将根目录中的.example.env重命名为.env

# URL 访问模式

  • 多应用: http://serverName/index.php/应用/控制器/方法名/参数名/值;
  • 单应用: http://serverName/index.php/控制器/方法名/参数名/值;

提示

index.php可以省略,需要设置 URL 重写

控制器: controller 目录下的文件

# 控制器

控制器存放于 controller 目录

  • 如果创建的名字是驼峰式,可以直接访问,也可在大写字母前加_进行访问
  • 控制器方法使用 return 返回数据,可使用json($data)输出 json
  • 使用halt("信息")中断,进行调试

# 创建控制器

\app\controller\控制器名.php

<?php
namespace app\controller;

class 控制器名{
    public function 方法名(){
        // 获取方法名
        $this->request->action();
        // 获取实际路径
        $this->app->getBasePath()
        return "Hello World";
    }
}

访问方法:/控制器名/方法名/参数名/值

# 空控制器

定义 Error 类控制器,自定义错误

class Error{
    public function index(){
        return "当前控制器不存在";
    }
}

# 多级控制器

controller目录再建立目录并创建控制器

\controller\目录名\控制器名.php

class 控制器名{
    public function index(){
      return "Hello World";
    }
}

访问方法:/目录名.控制器名/方法名/参数名/值

# 数据库

提示

当数据库文件设置了前缀时,name()方法内可忽略前缀

# 配置

开发环境:

.env

[DATABASE]
TYPE = mysql
HOSTNAME = 数据库地址
DATABASE = 数据库名
USERNAME = 用户名
PASSWORD = 密码
HOSTPORT = 3306
CHARSET = utf8
DEBUG = true

部署环境:

\config\database.php

'connections'     => [
    'mysql' => [
        // 数据库类型
        'type'              => env('database.type', 'mysql'),
        // 服务器地址
        'hostname'          => env('database.hostname', '127.0.0.1'),
        // 数据库名
        'database'          => env('database.database', ''),
        // 用户名
        'username'          => env('database.username', 'root'),
        // 密码
        'password'          => env('database.password', ''),
        // 端口
        'hostport'          => env('database.hostport', '3306'),
    ],
]

# 模型

# 声明

数据库的表名即为模型名(不区分大小写)

新建 \app\model\模型名.php

class 模型名 extends Model {


}

# 查询数据

# 查询所有数据

public function index() {
    $数据集对象 = $模型名::select();
    return json($数据集对象);
}

# 单数据查询

查询符合条件的第一条数据,如果没有找到则会返回 null

$数据集对象 = $模型名::where("字段名",)->find();

//条件查询
$数据集对象 = $模型名::where("字段名",">",)->find();


//多条件查询
$数据集对象 = $模型名
                        ::where("字段名","=",)
                        ->where("字段名","=",)
                        ->find();

//多条件查询(数组方式)
$数据集对象 = $模型名::where([
    ["字段名","=",],
    ["字段名","=",]
])->find();

return json($数据集对象);

# 数据集查询

$数据集对象 = $模型名::where("字段名",)->select();
return json($数据集对象);

# 增加数据

成功返回影响行数

$模型名 = new 模型名();
$模型名->字段名 =;
$模型名->字段名 =;
$模型名->save();

# 删除数据

模型名::where("字段名",)->delete();
模型名::where("字段名",">",)->delete();

# 修改数据

$模型名 = 模型名::where("字段名",)->find();
$模型名->字段名 =;
$模型名->字段名 =;
$模型名->save();

批量修改数据

模型名::update([
    "字段名" =>,
    "字段名" =>],["字段名" =>])

# 查询数据

# 查询所有数据

public function index() {
    $数据集对象 = Db::name("表名")->select();
    return json($数据集对象);
}

# 单数据查询

查询符合条件的第一条数据,如果没有找到则会返回 null

$数据集对象 = Db::name("表名")->where("字段名",)->find();

//条件查询
$数据集对象 = Db::name("表名")->where("字段名",">",)->find();


//多条件查询
$数据集对象 = Db::name("表名")
                        ->where("字段名","=",)
                        ->where("字段名","=",)
                        ->find();

//多条件查询(数组方式)
$数据集对象 = Db::name("表名")->where([
    ["字段名","=",],
    ["字段名","=",]
])->find();

return json($数据集对象);

# 数据集查询

$数据集对象 = Db::name("表名")->where("字段名",)->select();
return json($数据集对象);

# 通配符查询

$数据集对象 = Db::name("表名")->whereLike("字段名","通配符表达式")->find();
return json($数据集对象);

# 区间查询

$数据集对象 = Db::name("表名")->whereBetween("字段名", [起始值,结束值])->select();
return json($数据集对象);

# 显示指定字段

$数据集对象 = Db::name("表名")->field("字段名,字段名")->select();
return json($数据集对象);

# 分页查询

$数据集对象 = Db::name("表名")->page(当前页数,总页数)->select();
return json($数据集对象);

# 其他查询

返回指定字段

$值 = Db::name("表名")->where("字段名",)->value("字段名");

# 新增数据

修改成功返回影响行数

$data = [
    "字段名" =>,
    "字段名" =>,
];

Db::name("表名")->insert($data);

# 新增多条数据

返回成功增加数据的个数

$data = [
    "字段名" =>,
    "字段名" =>,
],
[
    "字段名" =>,
    "字段名" =>,
];

Db::name("表名")->insert($data);

# 数据集对象方法

$数据集对象 = Db::name("表名")->select();

//转换为数组
$数据集对象->toArray();

//获取查询的数量
$数据集对象->count();

//获取查询数据的最大值
$数据集对象->max();

//获取查询数据的最小值
$数据集对象->min();

//获取查询数据的平均值
$数据集对象->avg();

//获取查询数据的总和
$数据集对象->sum();

# save 方法

sava() 方法可以自动判断是新增还是修改数据。如主键存在则修改,不存在则新增,修改成功返回影响行数

$data = [
    "字段名" =>,
    "字段名" =>,
];
Db::name("表名")->save($data);

# 修改数据

修改成功返回影响行数

$data = [
    "字段名" =>];
return Db::name("表名")->where("字段名",)->update($data);

提示

如果修改的数据包含了主键信息(如 id),则可省略 where 条件

# 删除数据

删除成功返回影响行数

Db::name("表名")->where("字段名",)->delete();
Db::name("表名")->where("字段名",">",)->delete();

# 返回上一次操作的 SQL 语句

Db::getLastSQL();

# 原生 SQL 查询

# 查询数据

错误返回 false

Db::query("SQL语句");

# 修改数据

Db::execute("SQL语句");

# 事务处理

事务处理,指的是需要执行多个 SQL 查询,一旦中途的某条数据执行失败,则回滚为初始状态

# 自动

Db::Transaction(function (){
    // 查询代码段
});

# 手动

Db::startTrans();
try {
    // 查询代码段
    Db::commit();
}catch (\Exception $e){
    Db::rollback();
    echo "执行SQL失败,数据已回滚";
}

# 获取器

将查询的数据字段进行处理

Db::name("表名")->withAttr("字段名",function($value,$data){
    //进行处理
    return $value
})->select();

# 数据库事件

class 控制器名 extends BaseController {
    public function initialize() {
        Db::event("before_select",function ($query){
            echo "执行了批量查询";
        });

        Db::event("after_update",function ($query){
            echo "修改了被执行";
        });
    }
}
最后更新: 2021/10/8 20:10:30