【问题标题】:Unknown column 'username' in LaravelLaravel 中的未知列“用户名”
【发布时间】:2018-02-18 00:37:00
【问题描述】:

2 天来一直在尝试解决这个问题。

当我尝试将用户数据植入我的数据库时,我得到:

SQLSTATE[42S22]:未找到列:1054 中的未知列“用户名” '字段列表' (SQL: 插入users (name, username, password, email, updated_at, created_at) 值(托尼, tony_admin, $2y$10$lBDvjtEu.tYueU
AuRutTteHLmOntXSBAZsX.tO.ZK3RtxwiLXOBGW, tony_admin@laravel.com, 2018-02-18 00:12:39, 2018-02-18 00:12:39))

用户.php

class User extends Authenticatable
{
    use Notifiable;
    protected $fillable = [
        'name', 'username', 'email', 'password',
    ];
    protected $hidden = [
        'password', 'remember_token',
    ];
}

创建用户迁移文件

class CreateUsersTable extends Migration
{

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

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

注册控制器

class RegisterController extends Controller
{

    use RegistersUsers;

    protected $redirectTo = '/home';

    public function __construct()
    {
        $this->middleware('guest');
    }

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

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

数据库播种器

class DatabaseSeeder extends Seeder
{

    public function run()
    {
        Model::unguard();
        $this->call(UsersTableSeeder::class);
        $this->command->info("Users table seeded :)");
        Model::reguard();
    }
}

class UsersTableSeeder extends Seeder
{
    public function run()
    {
        User::create(array(
            'name' => 'tony',
            'username' => 'tony_admin',
            'password' => Hash::make('admin'),
            'email' => 'tony_admin@laravel.com'
        ));
    }
}

我尝试搜索答案,但所有类似的问题似乎都在尝试使用外键,而我只是尝试将 username 字段添加到默认用户类。

我正在使用 Laravel 5.5.34 版。这是怎么回事?

【问题讨论】:

  • 您能否通过使用DESCRIBE <table> 确保您的表实际上具有新列username
  • 是的,你知道。迁移运行一次,迁移文件代表数据库更改的历史记录。它们的存在是为了允许协作开发,每个迁移由每个开发人员运行一次。这意味着任何时候您希望更改数据库,都必须创建一个新的迁移。
  • 当你错误地使用 Git 时,还有很多方法会导致一团糟,但如果你正确使用它,它也是一个令人难以置信的工具。如果你问我,迁移文件有点像。
  • 当您准备好从开发迁移到发布时,您当然可以将您的架构整合到一个迁移中,如果这更可取的话,您可以灵活地遵循最适合您的任何流程,但在开发过程中您会通常希望保持迁移原样,因为它与应用程序的版本控制密切相关,否则在恢复提交或切换分支时,您的数据库架构将与应用程序所期望的不匹配。
  • @MattD 拥有大量迁移文件总比 SQL 错误好,对吧?

标签: php laravel laravel-5.5


【解决方案1】:

人们一直在用错误的答案回答这个问题,所以我将发布我在有效的 cmets 中得到的答案。我试图用已经运行的相同迁移文件添加username 列。我需要创建一个新的迁移文件来更新users 表并添加usernamecolumn。迁移文件在 laravel 中只能运行一次。

【讨论】:

  • 只是关于“迁移文件只能在 laravel 中运行一次”的注释。 - 如果您正在开发中,您可以撤消迁移。当您正在开发一项功能以减少迁移文件的数量时,这会有所帮助。一旦其他人可能已经执行了迁移(您已将其推送到共享存储库,或将其发布到公共项目中),您希望保持这种状态。
【解决方案2】:

全部在 CMD 中运行

php artisan view:clear

php artisan cache:clear

php artisan debugbar:clear

composer dump-autoload

php artisan log:clear

【讨论】:

  • 这些都不能解决 OP 的问题。
【解决方案3】:

也许你可以用这个:

    DB::table('users')
    ->insert([
        'name' => 'tony',
        'username' => 'tony_admin',
        'password' => Hash::make('admin'),
        'email' => 'tony_admin@laravel.com'
    ]);

【讨论】:

    猜你喜欢
    • 2018-01-16
    • 2013-02-16
    • 1970-01-01
    • 2015-08-12
    • 2017-11-05
    • 1970-01-01
    • 2018-12-16
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多