我想在我的数据库表用户中添加另一列。我创建了一个名为Modify_users_table
的新迁移,其中包含添加列的代码。源代码没有任何问题,因为我之前使用过它,但它给出了一个错误,即表角色有问题吗?我怎么解决这个问题?这是错误和与错误相关的代码
以下是迁移Roles
:
public function up()
{
Schema::create('roles', function (Blueprint $table) {
$table->string('role_name')->length(55)->unique();
$table->increments('id');
$table->timestamps();
});
}
答案 0 :(得分:2)
你有很多问题。您的主要问题是您没有向表中添加列。您的脚本正在尝试创建一个新表,如下所示:
Schema::create('roles', function (Blueprint $table) {
您说您正在尝试向users表添加一列,但您甚至无法使用该用户的表:而是创建一个名为roles
的表,该表已存在。最简单的解决方案是执行Dhaval建议的操作:放弃添加的迁移,更新创建用户表,核对并重新开始的迁移。
"对"答案是创建一个新的迁移并添加指令以将列添加到users表以及删除它的说明。然后,您可以进行简单的迁移,而不是对数据库进行核对。这看起来像这样:
public function up()
{
Schema::table('users', function ( Blueprint $table ) {
$table->string('last_name')->after( 'first_name' )->default( '' );
});
}
public function down()
{
Schema::table( 'users', function ( Blueprint $table ) {
$table->dropColumn( ['last_name'] );
});
}
答案 1 :(得分:0)
你需要运行
php artisan migrate:rollback
如果还失败,只需进入并删除您可能必须执行的所有表,因为您的迁移表似乎搞砸了,或者当您运行上一次回滚时您的角色表没有删除表。
或者您可以使用migrate:reset
命令回滚所有应用程序的迁移:
php artisan migrate:reset
答案 2 :(得分:0)
我遇到了同样的问题,并且尝试了类似的方法,它非常适合我。我的Laravel版本是5.5。
public function up()
{
Schema::connection('mysql2')->create('images', function (Blueprint $table) {
$table->increments('id');
$table->string('name');
$table->string('image');
$table->timestamps();
});
}
public function down()
{
Schema::connection('mysql2')->dropIfExists('images');
}
我必须在项目中连接,一个是 mysql ,另一个是 mysql2 ,因为我的项目用于具有多个连接的数据库。
所以我的解决方案是尝试在函数中指定与数据库的连接。
如果未在函数中指定默认连接,则默认连接为 mysql ,下面给出示例。希望这会有所帮助!
public function up()
{
Schema::create('users', function (Blueprint $table) {
$table->increments('id');
$table->string('name');
$table->string('email',60)->unique();
$table->string('password');
$table->rememberToken();
$table->timestamps();
});
}
public function down()
{
Schema::dropIfExists('users');
}
因此,当您使用php artisan进行迁移时,它不会显示错误,
答案 3 :(得分:-1)
从数据库中删除表(我第一次遇到此问题时手动完成)
并在create_users_table迁移中进行此更改
$table->string('email', 60)->unique();
这对我有用..
希望这也有助于你