我使用laravel 5.6
我想将author_ID
更改为user_id
我有下面提到的列:
class CreatePostsTable extends Migration{
public function up()
{
Schema::create('posts', function (Blueprint $table) {
$table->increments('id');
$table->bigInteger('author_ID');
$table->bigInteger('category_ID')->nullable();
$table->longText('post_content');
$table->text('post_title');
$table->string('post_slug', 200);
$table->string('post_type', 20);
$table->timestamps();
});
}
public function down()
{
Schema::dropIfExists('posts');
}
}
我使用下面的链接更改列名:
How can I rename column in laravel using migration?
然后创建打击迁移:
php artisan make:migration rename_author_id_in_post_table
重命名迁移文件:
class UpdateUsernameInPostTable extends Migration{
public function up()
{
Schema::create('posts', function (Blueprint $table) {
$table->renameColumn('author_ID', 'user_id');
});
}
public function down()
{
Schema::create('posts', function (Blueprint $table) {
$table->renameColumn('user_id', 'author_ID');
});
}
}
但是使用运行命令:php artisan migrate
我遇到以下错误:
Symfony\Component\Debug\Exception\FatalThrowableError :
Class 'RenameAuthorIdInPostTable' not found
答案 0 :(得分:4)
该错误来自您的类名与PHP迁移文件的名称不对应的事实。文件名用于确定它们所包含的类的名称,因此,重要的是不要重命名一个类或文件而不重命名另一个。
将您的班级UpdateUsernameInPostTable
重命名为RenameAuthorIdInPostTable
,它应该可以工作。
如果没有,请运行composer dumpauto
重新加载自动加载文件,它肯定会工作。
答案 1 :(得分:3)
在删除现有迁移以更新名称之后,只需尝试此代码,
php artisan make:migration rename_author_id_in_posts_table --table=posts
它将创建一个迁移,然后在创建的迁移中以此替换up()和down()函数,
public function up()
{
Schema::table('posts', function (Blueprint $table) {
$table->renameColumn('author_ID', 'user_id');
});
}
并且down()与此相关,
public function down()
{
Schema::table('posts', function (Blueprint $table) {
$table->renameColumn('user_id', 'author_ID');
});
}
有关迁移的更多信息,您可以通过此链接Laravel Migrations。
我希望这对您有用。如有任何疑问,请发表评论。
迁移问题:
您正在使用Schema::create()
方法更改表,因为您已经为帖子表创建了迁移,所以无需执行Schema::create()
,只需使用Schema::table()
方法进行更新和更改任何字段。
Schema::create('posts', function (Blueprint $table) {
$table->renameColumn('author_ID', 'user_id');
});
答案 2 :(得分:-1)
最好的方法是检查我们的表中是否有某些列,只是在迁移时避免错误;)
public function up()
{
if (Schema::hasColumn('table_name', 'old_col_name'))
{
Schema::table('table_name', function (Blueprint $table)
{
$table->renameColumn('old_col_name', 'new_col_name');
});
}
}
/**
* Reverse the migrations.
*
* @return void
*/
public function down()
{
if (Schema::hasColumn('table_name', 'new_col_name'))
{
Schema::table('table_name', function (Blueprint $table)
{
$table->renameColumn('new_col_name', 'old_col_name');
});
}
}