【发布时间】:2018-02-18 00:37:00
【问题描述】:
2 天来一直在尝试解决这个问题。
当我尝试将用户数据植入我的数据库时,我得到:
SQLSTATE[42S22]:未找到列:1054 中的未知列“用户名” '字段列表' (SQL: 插入
users(name,username,password,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