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::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);
        }
    }
}

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

关联查询

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的对象展示
image
不使用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']);
        }
    }
}

新增
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');
//如果用文件夹包含起来,需要添加文件夹前缀访问
Route::any(':folder/<controller>/<action>Ajax', '/:folder.<controller>/<action>Ajax');
posted @ 2024-03-02 13:27  秋夜雨巷  阅读(81)  评论(0编辑  收藏  举报