ThinkPHP6实现增删改查接口

简介: ThinkPHP6实现增删改查接口

ThinkPHP增删改查接口实现

数据库连接配置

当.env文件中存在数据库配置时,这些配置会覆盖config/database.php中的相应配置。

通常在config/database.php中设置数据库连接的默认值或开发环境的值,并在.env文件中根据实际部署环境(如测试或生产环境)覆盖这些值。这样,你可以通过更改环境变量来调整配置,而无需修改代码中的配置文件,这有助于提高应用的安全性和灵活性。

数据库

CREATE TABLE `user` (
  `id` int(11) unsigned NOT NULL AUTO_INCREMENT COMMENT '主键',
  `username` varchar(255) COLLATE utf8mb4_unicode_ci DEFAULT NULL COMMENT '用户民',
  `email` varchar(255) COLLATE utf8mb4_unicode_ci DEFAULT NULL COMMENT '邮箱',
  `created_at` datetime DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
  `updated_at` datetime DEFAULT NULL ON UPDATE CURRENT_TIMESTAMP COMMENT '修改时间',
  PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;

出现问题,新建数据库时没设置charset字符集时,默认使用latin1出现的问题

#修改整个数据库字符集
ALTER DATABASE test CHARACTER SET = utf8mb4 COLLATE = utf8mb4_unicode_ci;
#只修改表字符集
ALTER TABLE user CONVERT TO CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
#只修改列字符集
ALTER TABLE user CHANGE username username VARCHAR(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;

Model实体类

在app/model下面新建UserModel实体类

<?php
namespace app\model;
use think\Model;
class User extends Model
{
    // 数据表名(数据库中的表名是user)
    protected $table = 'user';
    // 主键
    protected $pk = 'id';
    // 设置字段信息
    protected $schema = [
        'id'          => 'int',
        'username'    => 'string',
        'email'       => 'string',
        'created_at'  => 'datetime',
        'updated_at'  => 'datetime',
    ];
}

Controller(ORM操作数据库)

<?php
namespace app\controller;
use app\BaseController;
use app\model\User;
use think\Request;
class UserController extends BaseController
{
    // 获取用户列表
    public function index()
    {
        $users = User::where('status', 1)
                     ->where('age', '>', 25)
                     ->whereOr('name', 'Jane')
                     ->whereIn('city', ['New York', 'Los Angeles', 'Chicago'])
                     ->select();
        return json($users);
    }
    // 创建用户
    public function save(Request $request)
    {
        $data = $request->param();
        $user = User::create($data);
        return json($user);
    }
    // 获取指定用户信息
    public function read($id)
    {
        $user = User::find($id);
        if ($user) {
            return json($user);
        } else {
            return json(['error' => '读取失败,用户不存在'], 404);
        }
    }
    // 更新用户信息
    public function update(Request $request, $id)
    {
        $data = $request->param();
        $user = User::find($id);
        if ($user) {
            $user->save($data);
            return json($user);
        } else {
            return json(['error' => '更新失败,用户不存在'], 404);
        }
    }
    // 删除用户
    public function delete($id)
    {
        $result = User::destroy($id);
        if ($result) {
            return json(['message' => '删除成功']);
        } else {
            return json(['error' => '删除失败,用户不存在'], 404);
        }
    }
}

新增

修改

ID查询单条数据

删除

列表查询所有数据

关联查询

model设置映射

namespace app\model;
use think\Model;
//UserCity为中间表
class UserCityModel extends Model
{
    // 设置当前模型对应的完整数据表名称
    protected $table = 'user_city';
    // 定义与 CityModel 的关联
    public function city()
    {
        return $this->belongsTo(CityModel::class, 'cityid', 'id');
    }
}

controller使用映射

namespace app\controller;
use app\model\UserCityModel;
class UserCityController
{
    public function index($uid)
    {
        // 查询 user_city 表中 userid 为 $uid 的记录,并关联 city 表获取 cityname
        $result = UserCityModel::with(['city' => function($query) {
            $query->field('id, cityname'); // 选择 city 表中需要的字段
        }])->where('userid', '=', $uid)->select();
        // 将结果返回或输出
        return json($result);
    }
}

查询出来会以city为key的对象展示

不使用model关联直接leftjoin

namespace app\controller;
use think\facade\Db;
use think\facade\View;
class UserCityController
{
    public function index($uid)
    {
        // 使用 leftJoin 查询 user_city 和 city 表,并根据 userid 获取对应的 cityname
        $result = Db::table('user_city')
            ->alias('uc')
            ->leftJoin('city c', 'uc.cityid = c.cityid')
            ->where('uc.userid', '=', $uid)
            ->field('uc.*, c.cityname')
            ->select();
        // 将结果返回或输出
        return json($result);
    }
}

Controller(原生sql非ORM)

<?php
namespace app\controller;
use think\facade\Db;
use think\Request;
use think\Response;
class User2Controller
{
    //查询所有信息
    public function list()
    {
        $users = Db::query('SELECT * FROM user ', []);
        if ($users) {
            return json($users);
        } else {
            return json(['message' => 'User not found']);
        }
    }
    // 创建用户
    public function create(Request $request)
    {
        $username = $request->param('username');
        $email = $request->param('email');
        //$password = md5($request->post('password')); // 为了示例简单,这里使用md5加密,实际应用中请使用更安全的加密方式
        $result = Db::execute('INSERT INTO user (username, email) VALUES (?, ?)', [$username, $email]);
        if ($result) {
            return json(['message' => 'User created successfully']);
        } else {
            return json(['message' => 'Failed to create user']);
        }
    }
    // 获取用户信息
    public function read($id)
    {
        $user = Db::query('SELECT * FROM user WHERE id = ?', [$id]);
        if ($user) {
            return json($user);
        } else {
            return json(['message' => 'User not found']);
        }
    }
    // 更新用户信息
    public function update(Request $request, $id)
    {
        $username = $request->param('username');
        $email = $request->param('email');
        $result = Db::execute('UPDATE user SET username = ?, email = ? WHERE id = ?', [$username, $email, $id]);
        if ($result) {
            return json(['message' => 'User updated successfully']);
        } else {
            return json(['message' => 'Failed to update user']);
        }
    }
    // 删除用户
    public function delete($id)
    {
        $result = Db::execute('DELETE FROM user WHERE id = ?', [$id]);
        if ($result) {
            return json(['message' => 'User deleted successfully']);
        } else {
            return json(['message' => 'Failed to delete user']);
        }
    }
}

新增

修改

查询

删除

列表

路由配置

在route/app.php文件中定义路由规则,以便API能够响应HTTP请求

// 用户路由
Route::rule('user/<action>', 'UserController/<action>');
Route::rule('user2/<action>', 'User2Controller/<action>');
//或者根据请求逐个定义url
Route::post('user', 'UserController/create');
Route::get('user/:id', 'UserController/read');
Route::put('user/:id', 'UserController/update');
Route::delete('user/:id', 'UserController/delete');
//可以用这个兜底,所有controller的方法名以Ajax结尾的自动匹配url
Route::any('<controller>/<action>Ajax', '<controller>/<action>Ajax');
//如果用文件夹包含起来,需要添加文件夹前缀访问
Route::any(':folder/<controller>/<action>Ajax', '/:folder.<controller>/<action>Ajax');


相关文章
|
22天前
|
XML 关系型数据库 PHP
thinkphp6支持哪些数据库
【8月更文挑战第21天】thinkphp6支持哪些数据库
25 2
|
26天前
|
XML 数据库 数据格式
Spring5入门到实战------14、完全注解开发形式 ----JdbcTemplate操作数据库(增删改查、批量增删改)。具体代码+讲解 【终结篇】
这篇文章是Spring5框架的实战教程的终结篇,介绍了如何使用注解而非XML配置文件来实现JdbcTemplate的数据库操作,包括增删改查和批量操作,通过创建配置类来注入数据库连接池和JdbcTemplate对象,并展示了完全注解开发形式的项目结构和代码实现。
Spring5入门到实战------14、完全注解开发形式 ----JdbcTemplate操作数据库(增删改查、批量增删改)。具体代码+讲解 【终结篇】
|
26天前
|
SQL XML Java
Spring5入门到实战------12、使用JdbcTemplate操作数据库(增删改查)。具体代码+讲解 【上篇】
这篇文章是Spring5框架的实战教程,详细讲解了如何使用JdbcTemplate进行数据库的增删改查操作,包括在项目中引入依赖、配置数据库连接池、创建实体类、定义DAO接口及其实现,并提供了具体的代码示例和测试结果,最后还提供了完整的XML配置文件和测试代码。
Spring5入门到实战------12、使用JdbcTemplate操作数据库(增删改查)。具体代码+讲解 【上篇】
|
14天前
|
开发工具 数据安全/隐私保护 索引
LDAP学习笔记之二:389-DS(RHDS) 增删改查基本操作
LDAP学习笔记之二:389-DS(RHDS) 增删改查基本操作
|
14天前
|
关系型数据库 MySQL 数据库
MySQL数据库的增删改查
MySQL数据库的增删改查
11 0
|
1月前
|
关系型数据库 MySQL 大数据
C#使用SqlSugar操作MySQL数据库实现简单的增删改查
C#使用SqlSugar操作MySQL数据库实现简单的增删改查
137 2
|
16天前
|
存储 缓存 关系型数据库
Django后端架构开发:缓存机制,接口缓存、文件缓存、数据库缓存与Memcached缓存
Django后端架构开发:缓存机制,接口缓存、文件缓存、数据库缓存与Memcached缓存
27 0
|
22天前
|
SQL 关系型数据库 MySQL
"Python与MySQL的浪漫邂逅:一键掌握增删改查,开启你的数据库编程之旅!"
【8月更文挑战第21天】Python因其简洁的语法和强大的库支持,成为连接数据库的首选工具。本文介绍如何使用Python连接MySQL数据库并执行基本操作。首先需安装`mysql-connector-python`库。通过配置连接信息建立数据库连接后,可利用`cursor.execute()`执行SQL语句进行数据的增删改查,并通过`commit()`提交更改。查询时使用`fetchall()`或`fetchone()`获取结果。记得处理异常及关闭连接以释放资源。掌握这些基础,有助于高效进行数据库编程。
27 0
|
27天前
|
数据库连接 数据库
Thinkphp6多数据库实例跨库操作
Thinkphp6多数据库实例跨库操作
48 0
|
27天前
|
druid Java 数据库连接
SpringBoot项目整合MybatisPlus持久层框架+Druid数据库连接池,以及实现增删改查功能
SpringBoot项目整合MybatisPlus和Druid数据库连接池,实现基本的增删改查功能。
139 0