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


相关文章
|
4天前
|
SQL Java 数据库连接
数据库常用接口
ODBC(Open Database Connectivity):开放数据库互连技术为访问不同的SQL数据库提供了一个共同的接口。ODBC使用SQL作为访问数据的标准。这一接口提供了最大限度的互操作性,一个应用程序可以通过共同的一组代码访问不同的SQL数据库管理系统(DBMS)。 一个基于ODBC的应用程序对数据库的操作不依赖任何DBMS,不直接与DBMS打交道,所有的数据库操作由对应的DBMS的ODBC驱动程序完成。也就是说,不论是Access,MySQL还是Oracle数据库,均可用ODBC API进行访问。由此可见,ODBC的最大优点是能以统一的方式处理所有的数据库。
|
23天前
|
SQL JavaScript 关系型数据库
node博客小项目:接口开发、连接mysql数据库
【10月更文挑战第14天】node博客小项目:接口开发、连接mysql数据库
|
30天前
|
前端开发 Java 数据库连接
javamvc配置,增删改查,文件上传下载。
【10月更文挑战第4天】javamvc配置,增删改查,文件上传下载。
37 1
|
1月前
|
存储 NoSQL API
使用Py2neo进行Neo4j图数据库的增删改查操作
使用Py2neo进行Neo4j图数据库的增删改查操作
57 5
|
1月前
|
数据可视化 API PHP
低代码开发工具-学生管理系统-老师管理增删改查实现
低代码开发工具-学生管理系统-老师管理增删改查实现
30 5
|
2月前
|
SQL 关系型数据库 MySQL
学成在线笔记+踩坑(3)——【内容模块】课程分类查询、课程增改删、课程计划增删改查,统一异常处理+JSR303校验
课程分类查询、课程新增、统一异常处理、统一封装结果类、JSR303校验、修改课程、查询课程计划、新增/修改课程计划
学成在线笔记+踩坑(3)——【内容模块】课程分类查询、课程增改删、课程计划增删改查,统一异常处理+JSR303校验
|
23天前
|
JavaScript 前端开发 测试技术
[新手入门]todolist增删改查:vue3+ts版本!
【10月更文挑战第15天】[新手入门]todolist增删改查:vue3+ts版本!
|
2月前
|
前端开发 IDE 数据库连接
ThinkPHP6 模型层的模型属性,表映射关系,以及如何在控制层中使用模型层和模型层中的简单CRUD
本文详细介绍了ThinkPHP6中模型层的使用,包括模型属性设置、表映射关系、以及如何在控制层中使用模型层进行CRUD操作。
ThinkPHP6 模型层的模型属性,表映射关系,以及如何在控制层中使用模型层和模型层中的简单CRUD
|
2月前
|
SQL 关系型数据库 MySQL
ThinkPHP6 连接使用数据库,增删改查,find,select,save,insert,insertAll,insertGetId,delete,update方法的用法
本文介绍了在ThinkPHP6框架中如何连接和使用数据库进行增删改查操作。内容包括配置数据库连接信息、使用Db类进行原生MySQL查询、find方法查询单个数据、select方法查询数据集、save方法添加数据、insertAll方法批量添加数据、insertGetId方法添加数据并返回自增主键、delete方法删除数据和update方法更新数据。此外,还说明了如何通过数据库配置文件进行数据库连接信息的配置,并强调了在使用Db类时需要先将其引入。
ThinkPHP6 连接使用数据库,增删改查,find,select,save,insert,insertAll,insertGetId,delete,update方法的用法
|
1月前
|
Java API 数据库
Data jpa 增删改查的方法分别有哪些
Data jpa 增删改查的方法分别有哪些