validate引发的报错 SQLSTATE[42S02]: Base table or view not found

SQLSTATE[42S02]: Base table or view not found: 1146 Table ‘frost.email’ doesn’t exist (SQL: select count(*) as aggregate from email where email = 63435173@qq.com)
我发现了validate会引发SQL的报错。然而这里没有注释的写法是来自laravel8中文文档。

  public function login(Request $request)
    {
        $validated = $request->validate([
            'email' => 'required|email|unique:email',
            'password' => 'required|string|min:6|max:30',
        ]);
       /*  $this->validate($request, [
            'email' => 'required|email',
            'password' => 'required|min:6|max:30',

        ]); */

我发现使用注释掉的这段代码就不会报错,但是使用没有注释的代码,会报错。

《L05 电商实战》
从零开发一个电商项目,功能包括电商后台、商品 & SKU 管理、购物车、订单管理、支付宝支付、微信支付、订单退款流程、优惠券等
《G01 Go 实战入门》
从零开始带你一步步开发一个 Go 博客项目,让你在最短的时间内学会使用 Go 进行编码。项目结构很大程度上参考了 Laravel。
最佳答案

unique 规则的格式是 unique:表名.字段名,如果你查询的是 users 表,则为 users.email

2周前 评论
讨论数量: 4

报错不是说的email表不存在吗

2周前 评论
Richard852555 (楼主) 2周前

在这段代码中,错误的原因在于 unique 验证规则的参数配置。unique 规则用于检查数据库中是否存在唯一值,它的参数应该包含表名和列名,中间用逗号分隔。错误的代码:[ 'email' => 'required|email|unique:email', // ... ] php这里的 unique:email 是指在名为 email 的表中查找唯一值,但显然这不是一个有效的表名。正确的做法是提供实际的表名,例如假设用户表名为 users,则应改为:[ 'email' => 'required|email|unique:users,email', 'password' => 'required|string|min:6|max:30', ] php这样,Laravel 就会在 users 表中查找唯一的 email 字段值。所以,使用 $this->validate 方法时,你已经正确地指定了验证规则,而之前的错误就在于 unique 规则的参数配置。

2周前 评论

unique 规则的格式是 unique:表名.字段名,如果你查询的是 users 表,则为 users.email

2周前 评论

讨论应以学习和精进为目的。请勿发布不友善或者负能量的内容,与人为善,比聪明更重要!