Laravel Validation - unique:table,column

本文详细介绍了在Laravel中如何正确使用验证规则来检查数据的唯一性,避免因格式错误而导致的Columnnotfound:1054异常。通过具体示例展示了如何设置unique规则,并强调了在使用该规则时避免出现空格的重要性。

在写Laravel的Validation Rules时,我们常常需要检测一个数据是否已经在数据库里存在了(即检测唯一性),这个时候我们需要用到:

"unique:table,column"

注意,column前是不能加上空格的。
另外如果多条rules写在一行,注意column之后不能带空格,所以要么unique:table,column直接放在最后一行,比如:

'email' => 'required | string | unique:users,email_address'

要么就不带空格:

'email' => 'required | unique:users,email_address| string'

否则会出现Column not found: 1054的错误,原因是带有空格的表格名称在数据库里不存在。

<template> <div class="login-container"> <el-card class="box-card"> <div class="login-body"> <div class="login-title" @click="toIndex"> <img src="@/assets/03.png" style=" width: 40px; height: 40px; margin: 5px 5px -5px 0; -webkit-user-drag: none; -khtml-user-drag: none; -moz-user-drag: none; user-drag: none; " /> <b style="color: black;display: inline-block; margin-bottom: 20px;font-size: 28px;"> 区块链数据溯源平台 </b> </div> <el-form ref="form" :model="userForm" :rules="rules" label-width="0px"> <!-- 手机号输入框 --> <el-input placeholder="请输入手机号码..." v-model="userForm.accountNumber" class="login-input" maxlength="11" > <template slot="prepend"> <div class="iconfont icon-r-user2" style="font-size: 24px;"></div> </template> </el-input> <!-- 密码输入框:参数名改为password,与后端匹配 --> <el-input placeholder="请输入密码..." v-model="userForm.password" <!-- 从userPassword改为password --> class="login-input" @keyup.enter.native="login" show-password > <template slot="prepend"> <div class="iconfont icon-r-lock" style="font-size: 24px;"></div> </template> </el-input> <div class="login-submit"> <el-button type="primary" @click="login"> 登录</el-button> <el-button type="warning" autocomplete="off" @click="$router.push('/sign-in')" style="margin-left: 20px"> 注册</el-button> </div> <div class="other-submit"> <router-link to="/login-admin" class="sign-in-text"> 管理员登录</router-link> </div> </el-form> </div> </el-card> </div> </template> <script> export default { name: "login", data() { return { // 表单数据:密码参数名从userPassword改为password userForm: { accountNumber: '', password: '' // 与后端接口参数名一致 }, // 简单表单验证(可选,增强用户体验) rules: { accountNumber: [ { required: true, message: '请输入手机号', trigger: 'blur' }, { pattern: /^1[3-9]\d{9}$/, message: '请输入正确的手机号格式', trigger: 'blur' } ], password: [ { required: true, message: '请输入密码', trigger: 'blur' }, { min: 6, message: '密码长度不能少于6位', trigger: 'blur' } ] } }; }, methods: { async login() { // 先验证表单(可选) this.$refs.form.validate(async (valid) => { if (!valid) return; try { // 调用登录接口:参数名与后端匹配(accountNumber和password) const res = await this.$api.userLogin({ accountNumber: this.userForm.accountNumber, password: this.userForm.password // 传递正确的参数名 }); console.log("登录响应:", res); // 后端Result类中成功的code是200,而非status_code if (res.code == 200) { // 修正判断条件 // 处理登录时间(如果需要) if (res.data && res.data.signInTime) { res.data.signInTime = res.data.signInTime.substring(0, 10); } // 保存用户信息到全局 this.$globalData.userInfo = res.data; // 跳转到首页 this.$router.replace('/index'); } else { // 后端返回错误信息(如账号密码错误) this.$message.error(res.msg || "登录失败"); } } catch (e) { console.error("登录请求失败:", e); // 网络错误或服务器异常处理 this.$message.error("服务器异常,请稍后重试"); } }); }, toIndex() { this.$router.replace({ path: '/index' }); } } } </script> <style scoped> /* 样式保持不变 */ .login-container { display: flex; justify-content: center; align-items: center; height: 100vh; width: 100%; position: fixed; top: 0; left: 0; width: 100%; overflow-y: auto; height: 100%; background: url("../../assets/background.jpg") center top / cover no-repeat; } .login-body { padding: 30px; width: 300px; height: 100%; } .login-title { padding-bottom: 30px; text-align: center; font-weight: 600; font-size: 20px; color: #409EFF; cursor: pointer; } .login-input { margin-bottom: 20px; } .login-submit { margin-top: 20px; display: flex; justify-content: center; } .sign-in-container { padding: 0 10px; } .sign-in-text { color: #409EFF; font-size: 16px; text-decoration: none; line-height: 28px; } .other-submit { display: flex; justify-content: space-between; margin-top: 30px; margin-left: 200px; } </style> package com.flea.fleabackend.controller; import com.flea.fleabackend.entity.ShUser; import com.flea.fleabackend.service.IShUserService; import com.flea.fleabackend.util.Result; import org.springframework.web.bind.annotation.*; import jakarta.validation.Valid; import org.springframework.validation.BindingResult; // 控制器根路径改为 "/user"(与前端请求的 "/user/sign-in" 匹配) @RestController @RequestMapping("/user") public class ShUserController { private final IShUserService userService; public ShUserController(IShUserService userService) { this.userService = userService; } // 注册接口:路径改为 "/sign-in"(与前端url完全一致) @PostMapping("/sign-in") public Result<?> userRegister( @Valid @RequestBody ShUser user, BindingResult bindingResult ) { // 参数校验失败的反馈 if (bindingResult.hasErrors()) { String errorMsg = bindingResult.getFieldError().getDefaultMessage(); return Result.error("注册失败:" + errorMsg); } // 执行注册逻辑 boolean success = userService.userRegister(user); return success ? Result.success("注册成功") : Result.error("账号已存在或注册信息不完整"); } // 登录接口:同步匹配前端的 "/user/login" 请求 @GetMapping("/login") public Result<?> userLogin( @RequestParam String accountNumber, @RequestParam String userPassword // 参数名从userPassword改为password ) { // 服务层调用时使用修改后的参数名password ShUser user = userService.userLogin(accountNumber, userPassword); return user != null ? Result.success(user, "登录成功") : Result.error("账号或密码错误"); } // 其他接口(如getUserInfo)也需同步调整路径,例如: @GetMapping("/info") public Result<?> getUserInfo(@RequestParam Long id) { ShUser user = userService.getUserById(id); return user != null ? Result.success(user) : Result.error("查询用户信息失败"); } } package com.flea.fleabackend.entity; import lombok.Data; import java.time.LocalDateTime; import jakarta.validation.constraints.NotBlank; @Data public class ShUser { private Long id; // 对应前端的“账号”输入框(字段名:accountNumber) @NotBlank(message = "账号(手机号)不能为空") // @Pattern(regexp = "^1[3-9]\\d{9}$", message = "手机号格式不正确") private String accountNumber; // 对应前端的“密码”输入框(字段名:userPassword) @NotBlank(message = "密码不能为空") // @Pattern(regexp = "^[a-zA-Z0-9]{6,16}$", message = "密码需为6-16位数字或字母") private String userPassword; // 对应前端的“昵称”输入框(字段名:nickname) @NotBlank(message = "昵称不能为空") private String nickname; private String avatar; private LocalDateTime signInTime; private Integer userStatus; } package com.flea.fleabackend.mapper; import com.flea.fleabackend.entity.ShUser; import org.apache.ibatis.annotations.*; @Mapper public interface ShUserMapper { // 根据账号(手机号)查询用户 @Select("SELECT * FROM sh_user WHERE account_number = #{accountNumber}") ShUser selectByAccountNumber(String accountNumber); // 根据id查询用户 @Select("SELECT * FROM sh_user WHERE id = #{id}") ShUser selectById(Long id); // 注册用户(修复密码参数映射) @Insert("INSERT INTO sh_user(" + "account_number, " + "user_password, " + // 数据库字段 "nickname, " + "avatar, " + "sign_in_time, " + "user_status" + ") VALUES(" + "#{accountNumber}, " + "#{userPassword}, " + // 匹配实体类字段userPassword "#{nickname}, " + "#{avatar}, " + "#{signInTime}, " + "0" + ")") @Options(useGeneratedKeys = true, keyProperty = "id") // 获取自增ID int insert(ShUser user); // 更新用户信息 @Update("UPDATE sh_user SET nickname = #{nickname}, avatar = #{avatar} WHERE id = #{id}") int updateInfo(ShUser user); // 封禁用户 @Update("UPDATE sh_user SET user_status = 1 WHERE id = #{id}") int banUser(Long id); } package com.flea.fleabackend.service.impl; import com.flea.fleabackend.entity.ShUser; import com.flea.fleabackend.mapper.ShUserMapper; import com.flea.fleabackend.service.IShUserService; import org.springframework.stereotype.Service; import org.springframework.util.StringUtils; /** * 用户服务实现类:解决账密错误、空指针问题 */ @Service public class ShUserServiceImpl implements IShUserService { private final ShUserMapper shUserMapper; // 构造函数注入(Spring推荐方式) public ShUserServiceImpl(ShUserMapper shUserMapper) { this.shUserMapper = shUserMapper; } /** * 登录逻辑优化: * 1. 严格参数校验(避免空值/空字符串) * 2. 适配数据库明文密码验证 * 3. 完善空值判断,避免空指针 */ @Override public ShUser userLogin(String accountNumber, String password) { // 1. 严格校验入参(空值/空字符串都拒绝) if (!StringUtils.hasText(accountNumber) || !StringUtils.hasText(password)) { return null; // 入参无效,直接返回null(对应账密错误) } // 2. 根据账号查询用户(确保Mapper的SQL字段正确) ShUser user = shUserMapper.selectByAccountNumber(accountNumber.trim()); // trim去除空格 // 3. 密码验证(多层空值判断,适配明文密码) if (user == null) { return null; // 账号不存在 } if (!StringUtils.hasText(user.getUserPassword())) { return null; // 数据库中密码为空,验证失败 } // 明文密码对比(与数据库存储一致) if (password.trim().equals(user.getUserPassword().trim())) { // 4. 额外校验用户状态(0=正常,1=封禁) if (user.getUserStatus() == 1) { return null; // 账号被封禁,返回null } return user; // 登录成功 } return null; // 密码错误 } @Override public boolean userRegister(ShUser user) { // 注册参数校验 if (user == null || !StringUtils.hasText(user.getAccountNumber()) || !StringUtils.hasText(user.getUserPassword()) || !StringUtils.hasText(user.getNickname())) { return false; } // 检查账号是否已存在 ShUser existingUser = shUserMapper.selectByAccountNumber(user.getAccountNumber().trim()); if (existingUser != null) { return false; // 账号已存在 } // 注册时密码明文存储(与登录逻辑一致) user.setAccountNumber(user.getAccountNumber().trim()); user.setUserPassword(user.getUserPassword().trim()); return shUserMapper.insert(user) > 0; } @Override public ShUser getUserById(Long id) { if (id == null) { return null; } return shUserMapper.selectById(id); } @Override public boolean updateUserInfo(ShUser user) { if (user == null || user.getId() == null || !StringUtils.hasText(user.getNickname())) { return false; } return shUserMapper.updateInfo(user) > 0; } @Override public boolean banUser(Long userId) { if (userId == null) { return false; } return shUserMapper.banUser(userId) > 0; } } // filePath: com/flea/fleabackend/service/IShUserService.java package com.flea.fleabackend.service; import com.flea.fleabackend.entity.ShUser; public interface IShUserService { // 用户登录(手机号+密码) ShUser userLogin(String accountNumber, String password); // 用户注册(账号唯一性校验) boolean userRegister(ShUser user); // 根据ID查询用户 ShUser getUserById(Long id); // 更新用户信息(昵称、头像) boolean updateUserInfo(ShUser user); // 封禁用户(管理员操作) boolean banUser(Long userId); } <?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd"> <!-- namespace必须和ShUserMapper接口的全路径一致 --> <mapper namespace="com.flea.fleabackend.mapper.ShUserMapper"> <!-- 通用结果集映射:解决数据库字段与实体类属性映射问题 --> <resultMap id="ShUserResultMap" type="com.flea.fleabackend.entity.ShUser"> <id column="id" property="id"/> <result column="account_number" property="accountNumber"/> <!-- 数据库字段→实体类属性 --> <result column="user_password" property="userPassword"/> <result column="nickname" property="nickname"/> <result column="avatar" property="avatar"/> <result column="sign_in_time" property="signInTime"/> <result column="user_status" property="userStatus"/> </resultMap> <!-- 根据账号查询用户(登录核心SQL) --> <select id="selectByAccountNumber" parameterType="String" resultMap="ShUserResultMap"> SELECT id, account_number, user_password, nickname, avatar, sign_in_time, user_status FROM sh_user WHERE account_number = #{accountNumber} <!-- 与数据库字段一致 --> <!-- 假设有逻辑删除字段,没有则删除该条件 --> </select> <!-- 根据ID查询用户 --> <select id="selectById" parameterType="Long" resultMap="ShUserResultMap"> SELECT id, account_number, user_password, nickname, avatar, sign_in_time, user_status FROM sh_user WHERE id = #{id} AND is_deleted = 0 </select> <select id="selectByPage" parameterType="map" resultType="com.flea.fleabackend.entity.ShIdleItem"> SELECT * FROM sh_idle_item WHERE status = 1 <!-- 1=已发布状态 --> LIMIT #{offset}, #{size} </select> <select id="selectTotalCount" resultType="int"> SELECT COUNT(*) FROM sh_idle_item WHERE status = 1 </select> <select id="selectByLabel" parameterType="map" resultType="com.flea.fleabackend.entity.ShIdleItem"> SELECT * FROM sh_idle_item WHERE status = 1 AND idle_label = #{idleLabel} LIMIT #{offset}, #{size} </select> <select id="selectCountByLabel" parameterType="string" resultType="int"> SELECT COUNT(*) FROM sh_idle_item WHERE status = 1 AND idle_label = #{idleLabel} </select> <!-- 新增用户(注册) --> <insert id="insert" parameterType="com.flea.fleabackend.entity.ShUser"> INSERT INTO sh_user ( account_number, user_password, nickname, avatar, sign_in_time, user_status ) VALUES ( #{accountNumber}, #{userPassword}, #{nickname}, #{avatar}, #{signInTime}, #{userStatus} ) </insert> <!-- 更新用户信息 --> <update id="updateInfo" parameterType="com.flea.fleabackend.entity.ShUser"> UPDATE sh_user <set> <if test="nickname != null and nickname != ''">nickname = #{nickname},</if> <if test="avatar != null and avatar != ''">avatar = #{avatar},</if> <if test="userStatus != null">user_status = #{userStatus}</if> </set> WHERE id = #{id} AND is_deleted = 0 </update> <!-- 封禁用户(修改状态) --> <update id="banUser" parameterType="Long"> UPDATE sh_user SET user_status = 1 <!-- 1=封禁状态 --> WHERE id = #{userId} AND is_deleted = 0 </update> </mapper> server: port: 80 spring: # 数据库配置(修改为你的本地数据库信息) datasource: url: jdbc:mysql://localhost:3306/flea_market?useSSL=false&serverTimezone=Asia/Shanghai&allowPublicKeyRetrieval=true username: root # 你的MySQL用户名(默认root) password: 123456 # 你的MySQL密码(自己设置的) driver-class-name: com.mysql.cj.jdbc.Driver # MyBatis-Plus配置(可选,优化体验) mybatis-plus: mapper-locations: classpath:mapper/*.xml # 若有XML映射文件,指定路径 type-aliases-package: com.flea.fleabackend.entity # 实体类别名包 configuration: map-underscore-to-camel-case: true # 下划线转驼峰(如数据库字段user_name → 实体类userName) log-impl: org.apache.ibatis.logging.stdout.StdOutImpl # 打印SQL日志(方便调试) <?xml version="1.0" encoding="UTF-8"?> <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd"> <modelVersion>4.0.0</modelVersion> <!-- Spring Boot父工程(统一管理版本) --> <parent> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-parent</artifactId> <version>3.2.10</version> <relativePath/> </parent> <!-- 项目信息 --> <groupId>com.flea</groupId> <artifactId>flea-backend</artifactId> <version>0.0.1-SNAPSHOT</version> <name>flea-backend</name> <description>Flea 二手交易平台后端</description> <!-- 全局属性 --> <properties> <java.version>21</java.version> <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding> </properties> <!-- 【关键】配置国内Maven镜像(阿里云),解决依赖下载失败问题 --> <repositories> <repository> <id>aliyunmaven</id> <url>https://maven.aliyun.com/repository/public</url> <releases> <enabled>true</enabled> </releases> <snapshots> <enabled>true</enabled> </snapshots> </repository> </repositories> <pluginRepositories> <pluginRepository> <id>aliyunmaven</id> <url>https://maven.aliyun.com/repository/public</url> <releases> <enabled>true</enabled> </releases> <snapshots> <enabled>true</enabled> </snapshots> </pluginRepository> </pluginRepositories> <!-- 核心依赖 --> <dependencies> <!-- Web核心依赖 --> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-web</artifactId> </dependency> <!-- MyBatis整合依赖 --> <dependency> <groupId>org.mybatis.spring.boot</groupId> <artifactId>mybatis-spring-boot-starter</artifactId> <version>3.0.3</version> </dependency> <dependency> <groupId>com.baomidou</groupId> <artifactId>mybatis-plus-boot-starter</artifactId> <version>3.5.5</version> </dependency> <!-- MySQL驱动 --> <dependency> <groupId>com.mysql</groupId> <artifactId>mysql-connector-j</artifactId> <scope>runtime</scope> </dependency> <!-- Lombok --> <dependency> <groupId>org.projectlombok</groupId> <artifactId>lombok</artifactId> <optional>true</optional> </dependency> <!-- 参数校验依赖(解决@Valid报错) --> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-validation</artifactId> </dependency> <!-- 测试依赖 --> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-test</artifactId> <scope>test</scope> </dependency> </dependencies> <!-- 构建配置 --> <build> <resources> <resource> <directory>src/main/resources</directory> <includes> <include>**/*</include> </includes> </resource> <resource> <directory>src/main/java</directory> <includes> <include>**/*.xml</include> </includes> </resource> </resources> <plugins> <plugin> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-maven-plugin</artifactId> <configuration> <excludes> <exclude> <groupId>org.projectlombok</groupId> <artifactId>lombok</artifactId> </exclude> </excludes> </configuration> </plugin> </plugins> </build> </project> CREATE DATABASE IF NOT EXISTS flea_market CHARACTER SET utf8 COLLATE utf8_general_ci; USE flea_market; DROP TABLE IF EXISTS `sh_address`; CREATE TABLE `sh_address` ( `id` bigint(0) NOT NULL AUTO_INCREMENT COMMENT '自增主键', `consignee_name` varchar(32) CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL COMMENT '收货人姓名', `consignee_phone` varchar(16) CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL COMMENT '收货人手机号', `province_name` varchar(32) CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL COMMENT '省', `city_name` varchar(32) CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL COMMENT '市', `region_name` varchar(32) CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL COMMENT '区', `detail_address` varchar(64) CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL COMMENT '详细地址', `default_flag` tinyint(0) NOT NULL COMMENT '是否默认地址', `user_id` bigint(0) NOT NULL COMMENT '用户主键id', PRIMARY KEY (`id`) USING BTREE, INDEX `user_id_index`(`user_id`) USING BTREE ) ENGINE = InnoDB AUTO_INCREMENT = 31 CHARACTER SET = utf8 COLLATE = utf8_general_ci ROW_FORMAT = Compact; -- ---------------------------- -- Records of sh_address -- ---------------------------- -- ---------------------------- -- Table structure for sh_admin -- ---------------------------- DROP TABLE IF EXISTS `sh_admin`; CREATE TABLE `sh_admin` ( `id` bigint(0) NOT NULL AUTO_INCREMENT COMMENT '自增主键', `account_number` varchar(16) CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL COMMENT '管理员账号', `admin_password` varchar(16) CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL COMMENT '密码', `admin_name` varchar(8) CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL COMMENT '管理员名字', PRIMARY KEY (`id`) USING BTREE, UNIQUE INDEX `account_number`(`account_number`) USING BTREE ) ENGINE = InnoDB AUTO_INCREMENT = 12 CHARACTER SET = utf8 COLLATE = utf8_general_ci ROW_FORMAT = Compact; -- ---------------------------- -- Records of sh_admin -- ---------------------------- INSERT INTO `sh_admin` VALUES (1, 'admin', '123456', '管理员'); -- ---------------------------- -- Table structure for sh_favorite -- ---------------------------- DROP TABLE IF EXISTS `sh_favorite`; CREATE TABLE `sh_favorite` ( `id` bigint(0) NOT NULL AUTO_INCREMENT COMMENT '自增主键id', `create_time` datetime NOT NULL COMMENT '加入收藏的时间', `user_id` bigint(0) NOT NULL COMMENT '用户主键id', `idle_id` bigint(0) NOT NULL COMMENT '物主键id', PRIMARY KEY (`id`) USING BTREE, UNIQUE INDEX `user_id`(`user_id`, `idle_id`) USING BTREE ) ENGINE = InnoDB AUTO_INCREMENT = 48 CHARACTER SET = utf8 COLLATE = utf8_general_ci ROW_FORMAT = Compact; -- ---------------------------- -- Records of sh_favorite -- ---------------------------- INSERT INTO `sh_favorite` VALUES (48, '2023-12-09 12:32:39', 11, 113); -- ---------------------------- -- Table structure for sh_idle_item -- ---------------------------- DROP TABLE IF EXISTS `sh_idle_item`; CREATE TABLE `sh_idle_item` ( `id` bigint(0) NOT NULL AUTO_INCREMENT COMMENT '自增主键', `idle_name` varchar(64) CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL COMMENT '物名称', `idle_details` varchar(2048) CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL COMMENT '详情', `picture_list` varchar(1024) CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL COMMENT '图集', `idle_price` decimal(10, 2) NOT NULL COMMENT '价格', `idle_place` varchar(32) CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL COMMENT '发货地区', `idle_label` int(0) NOT NULL COMMENT '分类标签', `release_time` datetime NOT NULL COMMENT '发布时间', `idle_status` tinyint(0) NOT NULL COMMENT '状态(发布1、下架2、删除0)', `user_id` bigint(0) NOT NULL COMMENT '用户主键id', PRIMARY KEY (`id`) USING BTREE, INDEX `user_id_index`(`user_id`) USING BTREE ) ENGINE = InnoDB AUTO_INCREMENT = 105 CHARACTER SET = utf8 COLLATE = utf8_general_ci ROW_FORMAT = Compact; DROP TABLE IF EXISTS `sh_message`; CREATE TABLE `sh_message` ( `id` bigint(0) NOT NULL AUTO_INCREMENT COMMENT '自增主键', `user_id` bigint(0) NOT NULL COMMENT '用户主键id', `idle_id` bigint(0) NOT NULL COMMENT '主键id', `content` varchar(256) CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL COMMENT '留言内容', `create_time` datetime NOT NULL COMMENT '留言时间', `to_user` bigint(0) NOT NULL COMMENT '所回复的用户', `to_message` bigint(0) NULL DEFAULT NULL COMMENT '所回复的留言', PRIMARY KEY (`id`) USING BTREE, INDEX `user_id_index`(`user_id`) USING BTREE, INDEX `idle_id_index`(`idle_id`) USING BTREE, INDEX `to_user_index`(`to_user`) USING BTREE ) ENGINE = InnoDB AUTO_INCREMENT = 48 CHARACTER SET = utf8 COLLATE = utf8_general_ci ROW_FORMAT = Compact; -- ---------------------------- -- Records of sh_message -- ---------------------------- -- ---------------------------- -- Table structure for sh_order -- ---------------------------- DROP TABLE IF EXISTS `sh_order`; CREATE TABLE `sh_order` ( `id` bigint(0) NOT NULL AUTO_INCREMENT COMMENT '自增主键', `order_number` varchar(32) CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL COMMENT '订单编号', `user_id` bigint(0) NOT NULL COMMENT '用户主键id', `idle_id` bigint(0) NOT NULL COMMENT '物品主键id', `order_price` decimal(10, 2) NOT NULL COMMENT '订单总价', `payment_status` tinyint(0) NOT NULL COMMENT '支付状态', `payment_way` varchar(16) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL COMMENT '支付方式', `create_time` datetime NOT NULL COMMENT '创建时间', `payment_time` datetime NULL DEFAULT NULL COMMENT '支付时间', `order_status` tinyint(0) NOT NULL COMMENT '订单状态', `is_deleted` tinyint(0) NULL DEFAULT NULL COMMENT '是否删除', PRIMARY KEY (`id`) USING BTREE ) ENGINE = InnoDB AUTO_INCREMENT = 86 CHARACTER SET = utf8 COLLATE = utf8_general_ci ROW_FORMAT = Compact; -- ---------------------------- -- Records of sh_order -- ---------------------------- -- ---------------------------- -- Table structure for sh_order_address -- ---------------------------- DROP TABLE IF EXISTS `sh_order_address`; CREATE TABLE `sh_order_address` ( `id` bigint(0) NOT NULL AUTO_INCREMENT COMMENT '自增id', `order_id` bigint(0) NOT NULL COMMENT '订单id', `consignee_name` varchar(32) CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL COMMENT '收货人', `consignee_phone` varchar(32) CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL COMMENT '电话', `detail_address` varchar(128) CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL COMMENT '收货地址', PRIMARY KEY (`id`) USING BTREE, UNIQUE INDEX `orderId`(`order_id`) USING BTREE, INDEX `order_id_index`(`order_id`) USING BTREE ) ENGINE = InnoDB AUTO_INCREMENT = 23 CHARACTER SET = utf8 COLLATE = utf8_general_ci ROW_FORMAT = Compact; -- ---------------------------- -- Records of sh_order_address -- ---------------------------- -- Table structure for sh_type -- ---------------------------- DROP TABLE IF EXISTS `sh_type`; CREATE TABLE `sh_type` ( `id` bigint(0) NOT NULL AUTO_INCREMENT COMMENT '主键', `name` varchar(255) CHARACTER SET utf8 COLLATE utf8_bin NULL DEFAULT NULL COMMENT '分类名称', PRIMARY KEY (`id`) USING BTREE ) ENGINE = InnoDB CHARACTER SET = utf8 COLLATE = utf8_bin COMMENT = '类别表' ROW_FORMAT = Dynamic; -- ---------------------------- -- Records of sh_type -- ---------------------------- -- ---------------------------- -- Table structure for sh_user -- ---------------------------- DROP TABLE IF EXISTS `sh_user`; CREATE TABLE `sh_user` ( `id` bigint(0) NOT NULL AUTO_INCREMENT COMMENT '自增主键', `account_number` varchar(16) CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL COMMENT '账号(手机号)', `user_password` varchar(16) CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL COMMENT '登录密码', `nickname` varchar(32) CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL COMMENT '昵称', `avatar` varchar(256) CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL COMMENT '头像', `sign_in_time` datetime NOT NULL COMMENT '注册时间', `user_status` tinyint(0) NULL DEFAULT NULL COMMENT '状态(1代表封禁)', PRIMARY KEY (`id`) USING BTREE, UNIQUE INDEX `account_number`(`account_number`) USING BTREE ) ENGINE = InnoDB AUTO_INCREMENT = 12 CHARACTER SET = utf8 COLLATE = utf8_general_ci ROW_FORMAT = Compact; 根据代码帮我找出为什么平台登录成功后无法自动跳转至index页面的原因 并且展示修改后能解决报错的完整代码
最新发布
12-08
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值