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',

        ]); */

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

《L01 基础入门》
我们将带你从零开发一个项目并部署到线上,本课程教授 Web 开发中专业、实用的技能,如 Git 工作流、Laravel Mix 前端工作流等。
《L02 从零构建论坛系统》
以构建论坛项目 LaraBBS 为线索,展开对 Laravel 框架的全面学习。应用程序架构思路贴近 Laravel 框架的设计哲学。
最佳答案

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

1个月前 评论
讨论数量: 4

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

1个月前 评论

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

1个月前 评论
Richard852555 (楼主) 1个月前

在这段代码中,错误的原因在于 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 规则的参数配置。

1个月前 评论

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