Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Add a new column to existing table in a migration

I can't figure out how to add a new column to my existing database table using the Laravel framework.

I tried to edit the migration file using...

<?php  public function up() {     Schema::create('users', function ($table) {         $table->integer("paid");     }); } 

In terminal, I execute php artisan migrate:install and migrate.

How do I add new columns?

like image 223
kim larsen Avatar asked May 28 '13 12:05

kim larsen


2 Answers

To create a migration, you may use the migrate:make command on the Artisan CLI. Use a specific name to avoid clashing with existing models

for Laravel 5+:

php artisan make:migration add_paid_to_users_table --table=users 

for Laravel 3:

php artisan migrate:make add_paid_to_users 

You then need to use the Schema::table() method (as you're accessing an existing table, not creating a new one). And you can add a column like this:

public function up() {     Schema::table('users', function($table) {         $table->integer('paid');     }); } 

and don't forget to add the rollback option:

public function down() {     Schema::table('users', function($table) {         $table->dropColumn('paid');     }); } 

Then you can run your migrations:

php artisan migrate 

This is all well covered in the documentation for both Laravel 4 / Laravel 5:

  • Schema Builder
  • Migrations

And for Laravel 3:

  • Schema Builder
  • Migrations

Edit:

use $table->integer('paid')->after('whichever_column'); to add this field after specific column.

like image 94
Phill Sparks Avatar answered Oct 14 '22 16:10

Phill Sparks


I'll add on to mike3875's answer for future readers using Laravel 5.1 and onward.

To make things quicker, you can use the flag "--table" like this:

php artisan make:migration add_paid_to_users --table="users" 

This will add the up and down method content automatically:

/**  * Run the migrations.  *  * @return void  */ public function up() {     Schema::table('users', function (Blueprint $table) {         //     }); } 

Similarily, you can use the --create["table_name"] option when creating new migrations which will add more boilerplate to your migrations. Small point, but helpful when doing loads of them!

like image 37
camelCase Avatar answered Oct 14 '22 17:10

camelCase