Laravel uses database structure migrations to efficiently handle changes to your database schema in a version-controlled environment. Migrations are defined as PHP classes, and Laravel’s migration system executes them to uniformly modify your database schema across many environments, including development, staging, and production.

Important steps for configuring your environment and using migrations in Laravel:

1. Environment Configuration (.env file)

First, use the.env file to configure your environment’s database connection. Update the following keys based on your database configuration:

DB_CONNECTION=mysql       
DB_HOST=127.0.0.1         
DB_PORT=3306              
DB_DATABASE=your_database_name  
DB_USERNAME=your_username       
DB_PASSWORD=your_password       

If you have numerous environments (e.g., development and production), you can use separate.env files or configure various environment variables on each server.

2. Creating Migrations

Now generate a new migration file  by using the Artisan command:

php artisan make:migration create_users_table

This will generate a migration file in the database/migrations directory with a timestamp in the filename, ensuring that migrations are properly ordered. The file will have a class with up() and down() methods.

  • The up() method defines the modifications to be made (for example, establishing a table or adding columns).
  • The down() method specifies how to reverse the modifications (for example, lowering the table or removing columns).
use Illuminate\Database\Migrations\Migration;
use Illuminate\Database\Schema\Blueprint;
use Illuminate\Support\Facades\Schema;

class CreateUsersTable extends Migration
{
    public function up()
    {
        Schema::create('users', function (Blueprint $table) {
            $table->id();
            $table->string('name');
            $table->string('email')->unique();
            $table->timestamp('email_verified_at')->nullable();
            $table->string('password');
            $table->rememberToken();
            $table->timestamps();
        });
    }

    public function down()
    {
        Schema::dropIfExists('users');
    }
}

3. Running Migrations

To run all outstanding migrations (that have not yet been run), run the following Artisan command:

php artisan migrate

Laravel will utilize the connection information in your.env file to connect to the given database and perform the migration.

4. Rolling Back Migrations

To undo the latest set of migrations, run the following command:

php artisan migrate:rollback

You can also specify how many batches to roll back by using the –step option:

php artisan migrate:rollback --step=1

To roll back and rerun all migrations:

php artisan migrate:refresh

To reset all migrations, drop all tables, and run them again:

php artisan migrate:reset
php artisan migrate

5. Seeding Data

Seeders are useful for populating the database with test data. You can create a seeder with the Artisan command:

php artisan make:seeder UsersTableSeeder

Once established, you can specify how to seed data using the run() method. For example, seeding the users’ table:

use Illuminate\Database\Seeder;
use Illuminate\Support\Facades\DB;
use Illuminate\Support\Facades\Hash;

class UsersTableSeeder extends Seeder
{
    public function run()
    {
        DB::table('users')->insert([
            'name' => 'John Doe',
            'email' => 'john@example.com',
            'password' => Hash::make('password'),
        ]);
    }
}

You can run all seeders using:

php artisan db:seed

Or, run a specific seeder:

php artisan db:seed --class=UsersTableSeeder

 6.Configuring Migrations for Different Environments

In a multi-environment arrangement (local, production, etc.), you may choose to configure separate database connections for each environment. The Laravel configuration system allows you to configure this in the config/database.php file.

For example, you could have a MySQL connection for development and a PostgreSQL connection for production. Your .env files would vary by environment:

.env (Development)

DB_CONNECTION=mysql
DB_HOST=127.0.0.1
DB_PORT=3306
DB_DATABASE=dev_db
DB_USERNAME=root
DB_PASSWORD=root_password

.env.production (Production)

DB_CONNECTION=pgsql
DB_HOST=prod-db.example.com
DB_PORT=5432
DB_DATABASE=prod_db
DB_USERNAME=prod_user
DB_PASSWORD=prod_password

By following these instructions, you can ensure that Laravel manages your database schema consistently across several settings.

Share.
Leave A Reply

Exit mobile version