我不知道如何使用Laravel框架向现有数据库表添加新列。
我尝试使用...来编辑迁移文件。
<?php
public function up()
{
Schema::create('users', function ($table) {
$table->integer("paid");
});
}
在终端中,我执行php artisan migrate:install
和migrate
。
如何添加新列?
我不知道如何使用Laravel框架向现有数据库表添加新列。
我尝试使用...来编辑迁移文件。
<?php
public function up()
{
Schema::create('users', function ($table) {
$table->integer("paid");
});
}
在终端中,我执行php artisan migrate:install
和migrate
。
如何添加新列?
Answers:
要创建迁移,您可以在Artisan CLI上使用migration:make命令。使用特定名称以避免与现有模型冲突
对于Laravel 3:
php artisan migrate:make add_paid_to_users
对于Laravel 5+:
php artisan make:migration add_paid_to_users_table --table=users
然后,您需要使用该Schema::table()
方法(在访问现有表而不是创建新表时)。您可以添加如下所示的列:
public function up()
{
Schema::table('users', function($table) {
$table->integer('paid');
});
}
并且不要忘记添加回滚选项:
public function down()
{
Schema::table('users', function($table) {
$table->dropColumn('paid');
});
}
然后,您可以运行迁移:
php artisan migrate
Laravel 3的文档都对此进行了详细介绍:
对于Laravel 4 / Laravel 5:
编辑:
用于$table->integer('paid')->after('whichever_column');
在特定列之后添加此字段。
php artisan migrate
php artisan make:migration add_paid_to_users
我将为使用Laravel 5.1及更高版本的未来读者添加mike3875的答案。
为了使事情更快,您可以使用标志“ --table”,如下所示:
php artisan make:migration add_paid_to_users --table="users"
这将自动添加up
和down
方法的内容:
/**
* Run the migrations.
*
* @return void
*/
public function up()
{
Schema::table('users', function (Blueprint $table) {
//
});
}
同样,您可以--create["table_name"]
在创建新迁移时使用该选项,这将为迁移添加更多样板。一点点,但在加载它们时很有帮助!
Blueprint
在Laravel 5.1中添加了Laravel 5.0中的情况。仅需澄清一点。
通过执行以下命令来创建新的迁移:make:migration
范例:
php artisan make:migration add_store_id_to_users_table --table=users
在database / migrations文件夹中,您有新的迁移文件,例如:
2018_08_08_093431_add_store_id_to_users_table.php(请参阅评论)
<?php
use Illuminate\Support\Facades\Schema;
use Illuminate\Database\Schema\Blueprint;
use Illuminate\Database\Migrations\Migration;
class AddStoreIdToUsersTable extends Migration
{
/**
* Run the migrations.
*
* @return void
*/
public function up()
{
Schema::table('users', function (Blueprint $table) {
// 1. Create new column
// You probably want to make the new column nullable
$table->integer('store_id')->unsigned()->nullable()->after('password');
// 2. Create foreign key constraints
$table->foreign('store_id')->references('id')->on('stores')->onDelete('SET NULL');
});
}
/**
* Reverse the migrations.
*
* @return void
*/
public function down()
{
Schema::table('users', function (Blueprint $table) {
// 1. Drop foreign key constraints
$table->dropForeign(['store_id']);
// 2. Drop the column
$table->dropColumn('store_id');
});
}
}
之后运行命令:
php artisan migrate
如果出于任何原因要撤消上一次迁移,请运行以下命令:
php artisan migrate:rollback
您可以在文档中找到有关迁移的更多信息
您可以在初始Schema::create
方法中添加新列,如下所示:
Schema::create('users', function($table) {
$table->integer("paied");
$table->string("title");
$table->text("description");
$table->timestamps();
});
如果已经创建了表,则可以通过创建新的迁移并使用Schema::table
方法来向该表添加其他列:
Schema::table('users', function($table) {
$table->string("title");
$table->text("description");
$table->timestamps();
});
create_users_table
,然后添加列:add_email_password_columns_to_users
。
add_
在每个文件的开头使用动词来跟踪更改。这样,由于每次迭代都会创建一个新的添加文件,因此更容易跟踪版本控制等的更改。如果您只是继续修改“ create_
”,那么很难知道x员工,通过删除索引或添加新列等弄乱了某些东西,至少在我看来这很有意义!:)
您可以简单地修改现有的迁移文件,例如在表中添加一列,然后在终端中键入:
$ php artisan migrate:refresh
这个东西在laravel 5.1上工作。
首先,在您的终端上执行此代码
php artisan make:migration add_paid_to_users --table=users
之后,转到您的项目目录并展开目录数据库-迁移并编辑文件add_paid_to_users.php,添加此代码
public function up()
{
Schema::table('users', function (Blueprint $table) {
$table->string('paid'); //just add this line
});
}
之后,返回您的终端并执行此命令
php artisan migrate
希望对您有所帮助。
尽管迁移文件是最佳实践,就像其他人提到的那样,但在紧要关头,您也可以添加带有修补程序的列。
$ php artisan tinker
这是终端的单线示例:
Schema::table('users', function(\Illuminate\Database\Schema\Blueprint $table){ $table->integer('paid'); })
(此处将其格式化为便于阅读)
Schema::table('users', function(\Illuminate\Database\Schema\Blueprint $table){
$table->integer('paid');
});