【问题标题】:laravel "SQLSTATE[HY000]: General error: 1 no such table: user" but 'users' table existslaravel“SQLSTATE [HY000]:一般错误:1没有这样的表:用户”但“用户”表存在
【发布时间】:2018-10-29 02:29:59
【问题描述】:

我在 Windows 8.1 上使用 XAMPP 和 php 7.2 运行 Laravel 5.2,我正在尝试使用 laravel auth 注册表单和 sqlite 数据库注册用户。但是,当我尝试将新记录插入表 users 时出现错误。

SQLSTATE[HY000]: 一般错误: 1 no such table: user

当我迁移数据库时,它会创建用户表。但是,当我尝试使用注册表在users 表中插入新记录时,它会尝试访问user 表。所以我在数据库中创建了user 表,它工作正常,但记录插入到users 表中,而不是user 表中。

迁移

public function up(){
    Schema::create('users', function (Blueprint $table) {
        $table->increments('user_id');
        $table->string('name');
        $table->string('role');
        $table->string('username');
        $table->string('password');
        $table->rememberToken();
        $table->timestamps();
        });
    }

public function down(){
    Schema::drop('users');
}

用户模型

class User extends Authenticatable{
    protected $primaryKey = 'user_id';

    protected $fillable = [
        'name', 'role', 'username', 'password',
    ];

    protected $hidden = [
        'password', 'remember_token',
    ];
}

AuthController

namespace App\Http\Controllers\Auth;

use App\User;
use Validator;
use App\Http\Controllers\Controller;
use Illuminate\Foundation\Auth\ThrottlesLogins;
use Illuminate\Foundation\Auth\AuthenticatesAndRegistersUsers;

class AuthController extends Controller{

    use AuthenticatesAndRegistersUsers, ThrottlesLogins;

    protected $redirectTo = '/';
    protected $username = 'username';

    public function __construct()
    {
        $this->middleware($this->guestMiddleware(), ['except' => 'logout']);
    }

    protected function validator(array $data)
    {
        return Validator::make($data, [
            'name' => 'required|max:255',
            'role' => 'required|max:7',
            'username' => 'required|unique:user',
            'password' => 'required|min:6|confirmed',
        ]);
    }

    protected function create(array $data)
    {
        return User::create([
            'name' => $data['name'],
            'role' => $data['role'],
            'username' =>$data['username'],
            'password' => bcrypt($data['password']),
        ]);
    }
}

感谢您的帮助,抱歉英语不好。

【问题讨论】:

  • 不确定是否只是拼写错误,但没有user 表,而是有users 表。无论如何,雄辩的模型应该自动插入到该表中。编辑:没关系,我看到你已经注意到了。
  • 是的,我想是的,但是当我尝试使用 protected $table = 'tb_user' 进行更改时,它仍在尝试访问用户表。
  • 看我的回答,它解决了你的问题
  • 您还有什么问题吗?
  • 感谢您的建议。目前没有问题。

标签: php laravel sqlite


【解决方案1】:

请参考: https://laravel.com/docs/5.6/eloquent#eloquent-model-conventions

如果您有一个模型用户,那么您的数据库中的表必须是“用户”而不是“用户”。

【讨论】:

  • 他们知道,他们在问为什么它试图使用用户而不是用户
【解决方案2】:

您的问题在验证中:

protected function validator(array $data)
{
    return Validator::make($data, [
        'name' => 'required|max:255',
        'role' => 'required|max:7',
        'username' => 'required|unique:user',
        'password' => 'required|min:6|confirmed',
    ]);
}

您正在检查用户名是否在 user 而不是 users 中是唯一的,试试这个:

protected function validator(array $data)
{
    return Validator::make($data, [
        'name' => 'required|max:255',
        'role' => 'required|max:7',
        'username' => 'required|unique:users,username',
        'password' => 'required|min:6|confirmed',
    ]);
}

此外,您可能希望在迁移中添加唯一约束。

【讨论】:

  • 非常感谢,但我仍然不明白为什么你添加 required|unique:users,username 而不是 required|unique:users 如果它工作正常。
  • 使用users,username 明确表示检查用户表用户名列的唯一性。当您省略 username 时,它使用您正在验证的字段名称作为列名称。
【解决方案3】:

我遇到了类似的错误。这是由于

Schema::create('tasks', function (Blueprint $table) {
    $table->foreignId('owner_id')->nullable()->constrained('user')->index();

而不是(注意用户中的 s)

    $table->foreignId('owner_id')->nullable()->constrained('users')->index();

【讨论】:

    【解决方案4】:

    在您的users model 添加public $table = 'users' | public $table = 'user'

    【讨论】:

      猜你喜欢
      • 2021-09-19
      • 2022-10-23
      • 2023-03-09
      • 1970-01-01
      • 2021-09-10
      • 1970-01-01
      • 1970-01-01
      • 2018-07-21
      • 2017-04-30
      相关资源
      最近更新 更多