我想在laravel的现有表users
中添加一些新列。
我已经对此进行了搜索,并在进行这些搜索之后,已经使用命令php artisan make:migration add_columns_to_users
创建了迁移。
add_columns_to_users.php
public function up()
{
Schema::table('users', function($table) {
$table->string('address');
$table->string('city');
$table->string('tribe');
$table->string('country');
$table->integer('student_id');
$table->string('tribe_university_name');
$table->string('student_program_of_study');
$table->string('faculty');
$table->string('level');
});
}
public function down()
{
Schema::table('users', function($table) {
$table->dropColumn('address');
$table->dropColumn('city');
$table->dropColumn('tribe');
$table->dropColumn('country');
$table->dropColumn('student_id');
$table->dropColumn('tribe_university_name');
$table->dropColumn('faculty');
$table->dropColumn('level');
});
}
创建后,我运行此命令php artisan migrate
。
但是有同样的错误:
基本表或视图已存在:1050表'用户'已存在(SQL:创建表
users
(id
int unsigned not null auto_increment主键,name
varchar(255)不为空,password
varchar(255)不为空,remember_token
varchar(100)为空,created_at
时间戳为空,{{1} } timestamp null)默认字符集utf8整理utf8_unicode_ci)
用户表updated_at
的全名,另一个名称为2014_10_12_000000_create_users_table.php
如何解决这个问题?
我的主要查询是如何在现有表中添加新列?
答案 0 :(得分:1)
修改当前迁移无效,因为它在migration
表中的条目已经存在。因此,要在现有表中进行任何更改,您需要创建新的迁移脚本。
// remember `create` replaced by `table` here
Schema::table('users', function (Blueprint $table) {
// add whichever new columns you want to
});
执行以下步骤,
php artisan make:migrate modify_user_table
modify_user_table
目录中打开database/migrations
文件在我写的顶部添加新列。
现在在将新列添加到新的迁移文件中之后保存文件
php artisan migrate
编辑
如果没有用户数据,则打开2014_10_12_000000_create_users_table.php
文件,并在Schema::dropIfExists('users');
行之前添加Schema::create('users'...
。
如果有数据,则可以进行备份,然后再次执行上述步骤1。
答案 1 :(得分:0)
请执行步骤1。 PHP的工匠迁移:重置 第2步:使用PHPmyadmin(或类似工具)进入数据库并删除所有剩余的表 -包括迁移表。
毕竟请执行步骤3的php artisan迁移
答案 2 :(得分:0)
如果检查错误跟踪:
基本表或视图已存在:1050表“用户”已存在
这意味着用户表已经存在,因此在您进行迁移时,它试图创建一个已经在数据库中创建的表。
注意:不要忘记先备份数据库
从数据库删除用户表还会从迁移表中删除用户条目。
之后,执行migration Artisan命令:php artisan migrate
现在您的另一个问题是:如何在现有表中添加新列?
您必须使用以下命令创建表:
php artisan make:migration create_users_table
您得到的输出是这样的:创建的迁移:2019_04_12_070152_create_users_table
您的迁移结构是这样的:
public function up()
{
Schema::create('users', function (Blueprint $table) {
$table->increments('id');
$table->string('name');
$table->string('email')->unique();
$table->string('password');
$table->rememberToken();
$table->timestamps();
});
}
现在您要在现有用户表中添加新列
php artisan make:migration add_phone_number_to_users_table --table=users
使用Schema::table()
方法(因为您正在访问现有表,而不是创建新表)。您可以添加这样的列:
public function up()
{
Schema::table('users', function (Blueprint $table) {
$table->string('phonenumber')->after('name'); // use this for field after specific column.
});
}
/**
* Reverse the migrations.
*
* @return void
*/
public function down()
{
Schema::table('users', function (Blueprint $table) {
$table->dropColumn('phonenumber');
});
}
之后,您可以运行迁移:php artisan migrate
您的新列(phonenumber
)现在已添加到现有的用户表中,您可以在数据库中查看该表。
如果仍有疑问,请参阅此video
答案 3 :(得分:0)
问题来自php artisan migrate
,当2014_10_12_000000_create_users_table.php
已经迁移时,它将尝试迁移两个文件,因此IMO在这里有两种可能的解决方案:
users
表,然后重新运行迁移cmd。migrations
表中添加迁移名称,以使cmd不会尝试第二次运行它。答案 4 :(得分:0)
您需要在工匠命令中进行少量修改
artisan make:migration add_columns_to_users_table
然后您需要使用 Schema :: table()方法(当您访问现有表时,不创建新表)。您可以添加这样的列
public function up()
{
Schema::table('users', function($table) {
$table->type('column');
});
}
添加回滚选项:
public function down()
{
Schema::table('users', function($table) {
$table->dropColumn('column');
});
}
然后您可以运行迁移:
php artisan migrate
答案 5 :(得分:0)
您可能会收到此错误,因为您尝试创建另一个Users
表,该表已经存在于数据库中。这可能就是您发现错误Base table or view already exists: 1050 Table 'users' already exists
的原因。
因此,解决方案是尝试更改现有的Users
表,而不是运行另一种语法来创建和覆盖Users
表。通过在数据迁移文件夹中创建另一个alter class
。它曾经位于Laravel项目(modules
)上的../database/migrations/
文件夹中。
alter_users_table.php
。age
表上添加另一列(例如:int
列,类型为Users
,可以为空),则可以在{{ 1}}:
alter_users_table.php
class AlterUsersAddAge extends Migration
{
/**
* Run the migrations.
*
* @return void
*/
public function up()
{
Schema::table('Users', function (Blueprint $table) {
$table->int('age')->nullable();
});
}
/**
* Reverse the migrations.
*
* @return void
*/
public function down()
{
Schema::table('Users', function (Blueprint $table) {
$table->dropColumn('age');
});
}
}
。php artisan migrate
表上看到另一个新列age
。