Fork me on GitHub

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出现的问题
image

#修改整个数据库字符集
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::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);
        }
    }
}

新增
image
修改
image
ID查询单条数据
image
删除
image
列表查询所有数据
image

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

新增
image
修改
image
查询
image
删除
image
列表
image

路由配置

在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');
posted @ 2024-03-02 13:27  秋夜雨巷  阅读(18)  评论(0编辑  收藏  举报