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');
如果这篇文章对你有用,可以关注本人微信公众号获取更多ヽ(^ω^)ノ ~
![微信公众号二维码](https://images.cnblogs.com/cnblogs_com/aeolian/1679458/o_wechat_gzh_qrcode.jpg)