Takip et

Laravel Migrations Kılavuzu 2025: Veritabanı Yönetiminde Uzmanlaşın

Laravel projelerinizde veritabanı şemasını yönetmek karmaşık mı geliyor? Özellikle ekip çalışması yaparken veya bir uygulamayı farklı ortamlara (geliştirme, test, canlı) dağıtırken veritabanı değişikliklerini tutarlı bir şekilde yönetmek büyük bir zorluk olabilir. İşte bu noktada Laravel Migrations devreye giriyor ve adeta bir kurtarıcı görevi üstleniyor. Migrations, veritabanı şemanızı PHP koduyla tanımlamanıza ve sürüm kontrolü altında tutmanıza olanak tanıyan bir sistemdir. Bu sayede, projenizin yaşam döngüsü boyunca veritabanınızdaki tüm yapısal değişiklikleri izleyebilir, uygulayabilir ve gerektiğinde geri alabilirsiniz. 2025 yılına girerken, modern web geliştirme pratiklerinde veritabanı yönetimi her zamankinden daha merkezi bir rol oynuyor ve Laravel Migrations, bu süreci şeffaf, yönetilebilir ve hatasız hale getirmek için vazgeçilmez bir araç olarak öne çıkıyor. Geliştiricilerin çoğu zaman göz ardı ettiği ancak projenin stabilitesi ve sürdürülebilirliği için kritik olan bu konuyu, temelden ileri seviyeye kadar tüm detaylarıyla ele alacağımız bu kapsamlı rehber, veritabanı yönetimi süreçlerinizi optimize etmenize yardımcı olacak. Her geliştiricinin bilmesi gereken ipuçları, pratik örnekler ve gerçek dünya senaryolarıyla Laravel Migrations’ın gücünü keşfetmeye hazır olun. Amacımız, sadece “nasıl yapılır”ı anlatmak değil, aynı zamanda “neden yapılır” sorusuna da tatmin edici yanıtlar sunarak konuya derinlemesine hakim olmanızı sağlamaktır.

Laravel Migrations Temelleri: Veritabanı Şemanızı Adım Adım Nasıl Oluşturur ve Yönetirsiniz?

Laravel Migrations ile veritabanı yönetiminin temelini atmak oldukça basittir ancak doğru adımları izlemek, gelecekte yaşanabilecek potansiyel sorunların önüne geçmek için kritik öneme sahiptir. İlk olarak, bir migration dosyası oluşturmanız gerekir. Bu dosya, php artisan make:migration komutuyla kolayca oluşturulur. Örneğin, yeni bir posts tablosu oluşturmak istediğinizde, php artisan make:migration create_posts_table komutunu kullanırsınız. Laravel, bu komutla database/migrations dizini altında, içinde bir zaman damgası ve migration adını içeren yeni bir PHP dosyası oluşturur. Bu dosyada up() ve down() adında iki temel metot bulunur. up() metodu, veritabanına yapılması istenen değişiklikleri (örneğin yeni bir tablo oluşturma, sütun ekleme) içerirken, down() metodu ise bu değişiklikleri geri almak için (örneğin tabloyu silme, sütunu kaldırma) kullanılır. Bu, her bir değişikliğin hem ileri hem de geri yönde nasıl işleneceğini açıkça tanımladığımız anlamına gelir ve bu özellik, hatalı bir deploy durumunda hızla geri dönüş yapabilme yeteneği açısından paha biçilmezdir. Laravel’in Schema Builder sınıfı, veritabanı tablolarını ve sütunlarını programatik olarak tanımlamanıza olanak tanır. Örneğin, yeni bir posts tablosu oluşturmak ve içine title ve content sütunları eklemek için up() metodunuzda aşağıdaki gibi bir yapı kullanabilirsiniz:

Schema::create('posts', function (Blueprint $table) {
    $table->id();
    $table->string('title');
    $table->text('content');
    $table->timestamps();
});

Bu örnekte, Schema::create() metodu yeni bir tablo oluşturmak için kullanılır. Blueprint nesnesi ise tablonun sütunlarını tanımlamamızı sağlar. id() otomatik artan birincil anahtar, string() kısa metin (VARCHAR), text() daha uzun metin ve timestamps() ise created_at ve updated_at adında iki adet zaman damgası sütunu ekler. down() metodunda ise, oluşturduğumuz tablonun silinmesi gerektiğini belirtiriz:

Schema::dropIfExists('posts');

Migration dosyanızı oluşturup kaydettikten sonra, veritabanınıza uygulamak için php artisan migrate komutunu çalıştırırsınız. Bu komut, henüz uygulanmamış tüm migration'ları sırasıyla çalıştırır. Eğer bir hatayla karşılaşırsanız veya değişiklikleri geri almak isterseniz, php artisan migrate:rollback komutu en son uygulanan migration batch'ini geri alır. Bu temel adımlar, Laravel projelerinizde veritabanı şemasını yapılandırmanın ve yönetmenin omurgasını oluşturur. Projenizin büyüklüğü ne olursa olsun, bu adımları doğru ve tutarlı bir şekilde uygulamak, uzun vadede size büyük kolaylıklar sağlayacaktır. Unutmamak gerekir ki, her migration'ın bir amacı olmalı ve değişiklikleri net bir şekilde ifade etmelidir. Bu, ekip üyeleri arasında veritabanı değişiklikleri hakkında ortak bir anlayış oluşturulmasına da yardımcı olur.

Tablo ve Sütun Yönetimi: Pratik Uygulamalarla Schema Builder'a Derinlemesine Bakış

Laravel'in Schema Builder'ı, sadece yeni tablolar oluşturmaktan çok daha fazlasını yapmanıza olanak tanır; mevcut tabloları değiştirmek, sütun eklemek, silmek, değiştirmek ve indeksler ile yabancı anahtarlar gibi kısıtlamaları yönetmek için de güçlü araçlar sunar. Bu bölümde, Schema Builder'ın pratik uygulamalarına daha yakından bakarak, veritabanı şemanızı dinamik ve esnek bir şekilde nasıl yönetebileceğinizi inceleyeceğiz. Mevcut bir tabloya yeni bir sütun eklemek istediğinizde, yeni bir migration dosyası oluşturur ve Schema::table() metodunu kullanırsınız. Örneğin, users tablosuna address sütunu eklemek için aşağıdaki gibi bir migration oluşturabilirsiniz:

Schema::table('users', function (Blueprint $table) {
    $table->string('address')->nullable()->after('email');
});


after('email') metodu, yeni address sütununun email sütunundan hemen sonra yerleştirilmesini sağlar, bu da veritabanı şemanızın daha düzenli görünmesine yardımcı olur. nullable() ise bu sütunun boş bırakılabileceğini belirtir. Aynı şekilde, bir sütunun özelliklerini değiştirmek için change() metodunu kullanırız. Ancak bunu yapabilmek için öncelikle composer require doctrine/dbal komutuyla Doctrine DBAL kütüphanesini projenize eklemeniz gerekir. Diyelim ki posts tablosundaki title sütununu daha uzun bir metin tipine (örneğin mediumText) çevirmek istiyorsunuz:

Schema::table('posts', function (Blueprint $table) {
    $table->mediumText('title')->change();
});

Sütun silme veya yeniden adlandırma da benzer şekilde kolaydır:

Schema::table('posts', function (Blueprint $table) {
$table->dropColumn('subtitle'); // Sütunu siler
$table->renameColumn('old_name', 'new_name'); // Sütunu yeniden adlandırır
});

İndeksler, veritabanı sorgularının performansını artırmak için hayati öneme sahiptir. Laravel, çeşitli indeks türlerini kolayca tanımlamanıza olanak tanır:

Schema::table('products', function (Blueprint $table) {
$table->string('sku')->unique(); // Benzersiz indeks
$table->index('category_id'); // Normal indeks
$table->fullText('description'); // Tam metin indeksi (destekleyen veritabanları için)
});
Yabancı anahtarlar (Foreign Keys) ise tablolar arasındaki ilişkileri tanımlayarak veri bütünlüğünü sağlarlar. Örneğin, posts tablosundaki her gönderinin bir user'a ait olduğunu belirtmek için:

Schema::table('posts', function (Blueprint $table) {
    $table->foreignId('user_id')->constrained()->onDelete('cascade');
});


Burada constrained() metodu, Laravel'in varsayılan olarak users tablosunun id sütununa referans vermesini sağlar. onDelete('cascade') ise, ilişkili kullanıcı silindiğinde ona ait gönderilerin de otomatik olarak silineceğini belirtir. Bu gibi kaskatlama işlemleri, veri tutarlılığını korurken geliştiricinin iş yükünü önemli ölçüde azaltır. Schema Builder'ın bu esnekliği, projenizin ihtiyaçları değiştikçe veritabanı yapınızı sorunsuz bir şekilde adapte etmenize olanak tanır. Gerçek dünya senaryolarında, bir e-ticaret uygulamasında ürünlerin kategorilere ayrılması ve bu kategoriler arasındaki ilişkilerin yönetilmesi gibi durumlarda, bu Schema Builder yetenekleri vazgeçilmezdir. Örneğin, bir products tablonuz ve bir categories tablonuz varsa, ürünlerin hangi kategoriye ait olduğunu belirtmek için products tablosuna category_id sütununu ekleyip, categories tablosundaki id sütununa bir yabancı anahtar kısıtlaması eklemeniz gerekir. Bu yaklaşım, veri bütünlüğünü sağlarken, uygulamanızın daha sağlam ve güvenilir olmasını garantiler.

Uzman İpucu: Karmaşık şema değişikliklerinde, mevcut verilerinizi kaybetmemek için her zaman bir yedek alın ve change() metodu ile sütun özelliklerini değiştirirken veri tipi dönüşümlerinin uyumlu olduğundan emin olun. Ayrıca, Schema::disableForeignKeyConstraints() ve Schema::enableForeignKeyConstraints() metotlarını kullanarak geçici olarak yabancı anahtar kontrollerini devre dışı bırakıp tekrar etkinleştirebilirsiniz, bu da bazı karmaşık migration senaryolarında işleri kolaylaştırır.

Gelişmiş Migrations Teknikleri: Veri Bütünlüğünü ve Performansı Nasıl Sağlarsınız?

Veritabanı migration'ları, basit tablo değişikliklerinden çok daha fazlasını ifade eder; aynı zamanda veri bütünlüğünü korumak, performansı optimize etmek ve uygulamanın uzun vadeli sağlığını garanti altına almak için gelişmiş teknikleri kullanmayı gerektirir. Bu bölümde, deneyimli geliştiricilerin sıklıkla başvurduğu ileri düzey migration tekniklerine odaklanacağız. Bunlardan biri, migration'ların işlem (transaction) içinde çalıştırılmasıdır. Laravel, varsayılan olarak migration'ları veritabanı işlemleri içinde çalıştırır. Bu, bir migration sırasında bir hata oluşursa, veritabanının hata öncesindeki duruma geri döndürülmesini sağlar ve böylece kısmen uygulanmış, bozuk bir şemayla kalmaktan kaçınılır. Eğer özel durumlar için bu özelliği kapatmak isterseniz, migration sınıfınızda public $chunk = false; (Laravel 8 öncesi) veya public $batch = false; (Laravel 8 sonrası) gibi bir özellik tanımlayabilirsiniz ancak bu önerilmez. Veri bütünlüğünü sağlamak için en önemli araçlardan biri yabancı anahtar kısıtlamalarıdır. Daha önce de bahsettiğimiz gibi, foreignId()->constrained() ile basit ilişkileri kurabiliriz. Ancak, daha karmaşık kısıtlamalar veya farklı silme/güncelleme davranışları gerektiğinde onDelete() ve onUpdate() metotlarını kullanırız. Örneğin, bir kullanıcının silinmesi durumunda onun tüm yorumlarının da silinmesini istiyorsanız onDelete('cascade') kullanırsınız. Eğer yorumların kullanıcısız kalmasını (NULL olarak ayarlanmasını) isterseniz onDelete('set null') kullanabilirsiniz.

Schema::table('comments', function (Blueprint $table) {
    $table->foreignId('user_id')->nullable()->constrained()->onDelete('set null');
});


Performans açısından, indeksleme kritik bir rol oynar. Sadece unique() veya index() kullanmakla kalmayıp, çoklu sütun indeksleri (composite indexes) de tanımlayabilirsiniz. Örneğin, bir kullanıcı adı ve e-posta kombinasyonunun benzersiz olmasını istiyorsanız:

Schema::table('users', function (Blueprint $table) {
    $table->unique(['username', 'email']);
});


Bu, özellikle sık sorgulanan sütun kombinasyonları için sorgu performansını artırabilir. Ayrıca, softDeletes() metodu Laravel'in "yumuşak silme" (soft delete) özelliğini etkinleştirmek için kullanılır. Bu, bir kaydın veritabanından kalıcı olarak silinmek yerine, deleted_at sütununa bir zaman damgası eklenerek işaretlenmesini sağlar. Bu, veri kurtarma ve geçmişi izleme açısından çok değerli bir özelliktir.

Schema::table('products', function (Blueprint $table) {
    $table->softDeletes();
});


Migrations sırasında mevcut verileri güncellemeniz gerekebilir. Bu tür durumlarda, migration dosyanızda basit bir SQL sorgusu çalıştırmak veya Eloquent modellerinizi kullanarak veri manipulasyonu yapmak mümkündür. Ancak, migration'lar genel olarak şema değişiklikleri için tasarlandığından, veri manipülasyonu işlemlerini seeders ile yapmak daha iyi bir uygulamadır.

Uzman İpucu: Veritabanınızdaki tabloları yeniden adlandırmanız gerektiğinde Schema::rename('old_table_name', 'new_table_name'); metodunu kullanabilirsiniz. Bu, özellikle büyük ve karmaşık şemalarda tablonun tamamen silinip yeniden oluşturulmasından daha verimlidir. Aynı şekilde, bir sütunu yeniden adlandırmak için renameColumn() metodunu kullanabilirsiniz, ancak bunun için doctrine/dbal paketinin yüklü olması gerektiğini unutmayın.

Veritabanı Seeders ve State Yönetimi: Uygulamanızı Test Verileriyle Nasıl Doldurursunuz?

Laravel Migrations, veritabanı şemasını yönetirken, Seeders ise bu şemayı örnek veya test verileriyle doldurmak için mükemmel bir tamamlayıcıdır. Geliştirme sürecinde veya test ortamlarında, uygulamamızın belirli bir başlangıç durumuna sahip olması, doğru çalışıp çalışmadığını anlamak için hayati öneme sahiptir. Seeders, bu "başlangıç durumunu" kolayca oluşturmamızı sağlar. Bir seeder dosyası oluşturmak için php artisan make:seeder UserSeeder komutunu kullanırız. Bu, database/seeders dizini altında yeni bir PHP dosyası oluşturur. Bu dosyada run() adında bir metot bulunur ve bu metot, seeder çalıştırıldığında gerçekleştirilecek veri ekleme işlemlerini içerir. Örneğin, bir UserSeeder ile varsayılan bir kullanıcı oluşturabiliriz:

// database/seeders/UserSeeder.php
use App\Models\User;
use Illuminate\Database\Seeder;
use Illuminate\Support\Facades\Hash;

class UserSeeder extends Seeder
{
    public function run()
    {
        User::create([
            'name' => 'Test User',
            'email' => 'test@example.com',
            'password' => Hash::make('password'),
        ]);
        // Ayrıca birden fazla kullanıcı oluşturmak için Factory'leri kullanabilirsiniz.
        User::factory()->count(10)->create();
    }
}


Bu seeder'ı çalıştırmak için database/seeders/DatabaseSeeder.php dosyasında çağırırız:

// database/seeders/DatabaseSeeder.php
use Illuminate\Database\Seeder;

class DatabaseSeeder extends Seeder
{
    public function run()
    {
        $this->call([
            UserSeeder::class,
            // Diğer seeder'lar buraya eklenebilir
        ]);
    }
}


Daha sonra, tüm seeder'ları çalıştırmak için php artisan db:seed komutunu kullanırız. Eğer sadece belirli bir seeder'ı çalıştırmak isterseniz php artisan db:seed --class=UserSeeder komutuyla bunu yapabilirsiniz. Test verilerini oluşturmanın daha gelişmiş bir yolu ise Model Factories kullanmaktır. Factories, gerçekçi görünümlü ancak rastgele verilerle model örnekleri oluşturmayı kolaylaştırır. Örneğin, 100 adet sahte kullanıcı oluşturmak için:

// database/factories/UserFactory.php
use App\Models\User;
use Illuminate\Database\Eloquent\Factories\Factory;
use Illuminate\Support\Str;

class UserFactory extends Factory
{
    protected $model = User::class;

    public function definition()
    {
        return [
            'name' => $this->faker->name(),
            'email' => $this->faker->unique()->safeEmail(),
            'email_verified_at' => now(),
            'password' => '$2y$10$92IXUNpkjO0rOQ5byMi.Ye4oKoEa3Ro9z/eK.z.G8L.f0zQ.oK.K.W', // password
            'remember_token' => Str::random(10),
        ];
    }
}


Seeder dosyanızda User::factory()->count(50)->create(); gibi bir satır ekleyerek yüzlerce sahte kullanıcıyı kolayca veritabanınıza ekleyebilirsiniz. Veritabanı state yönetimi açısından, php artisan migrate:refresh komutu, tüm migration'ları geri alır ve ardından yeniden çalıştırır. Bu, veritabanınızı sıfırlayıp tüm migration'ları temiz bir şekilde uygulamak istediğinizde kullanışlıdır. Eğer bu işlem sırasında seeder'ların da çalışmasını isterseniz php artisan migrate:refresh --seed komutunu kullanabilirsiniz. Tamamen temiz bir başlangıç için php artisan migrate:fresh komutu, mevcut tüm tabloları veritabanından siler ve ardından tüm migration'ları yeniden çalıştırır. Bu komut da --seed bayrağı ile kullanılabilir. Bu komutlar, özellikle geliştirme ortamında sıkça veritabanı yapısını değiştirip test verileriyle doldurmanız gerektiğinde geliştirici verimliliğini artırır. Gerçek dünya vaka analizinde, bir e-ticaret uygulamasında farklı ürün kategorileri, binlerce ürün, müşteri yorumları ve sipariş verileri gibi karmaşık veri setlerini test etmek için factories ve seeders bir araya getirilir. Bu sayede, uygulamanın farklı senaryolara nasıl tepki verdiğini hızlıca görebilir, performans sorunlarını erkenden tespit edebilir ve geliştirme sürecini hızlandırabilirsiniz.

Deployment ve Ekip İşbirliği: Canlı Ortamda Migrations Nasıl Sorunsuz Yönetilir?

Bir Laravel uygulamasını canlıya alırken veya birden fazla geliştiricinin aynı proje üzerinde çalıştığı durumlarda, migration'ların doğru ve tutarlı bir şekilde yönetilmesi projenin başarısı için kritik öneme sahiptir. Yanlış uygulanan bir migration, canlı ortamda ciddi veri kaybına veya uygulama kesintisine yol açabilirken, ekip içinde uyumsuz veritabanı şemaları geliştirme sürecini yavaşlatabilir. Canlı ortama deployment yaparken en önemli noktalardan biri, migration'ların otomatik olarak çalıştırılmasıdır. Çoğu CI/CD (Sürekli Entegrasyon/Sürekli Dağıtım) sürecinde, yeni kod canlı sunucuya yüklendikten sonra php artisan migrate --force komutu çalıştırılır. --force bayrağı, komutun üretim ortamında onay istemeden çalışmasını sağlar, bu da otomatize edilmiş dağıtım süreçleri için gereklidir. Ancak, bu komutu otomatize ederken dikkatli olmak ve migration'larınızın hatasız olduğundan emin olmak esastır. Hata durumunda otomatik rollback mekanizmaları veya hızlı geri dönüş planları oluşturmak, olası riskleri minimize etmeye yardımcı olur. Ekip işbirliği söz konusu olduğunda, migration çakışmaları (migration conflicts) sıkça karşılaşılan bir sorundur. İki geliştiricinin aynı anda benzer veritabanı değişiklikleri üzerinde çalışması ve aynı migration dosya adlandırma konvansiyonunu kullanması durumunda ortaya çıkabilir. Bu tür çakışmaları önlemek için:

  • Her bir migration'ın sadece tek bir amaca hizmet etmesini sağlayın (örn. "add_posts_table" yerine "add_title_to_posts_table").
  • Migration dosyalarını oluştururken açıklayıcı ve spesifik isimler kullanın.
  • Düzenli olarak git pull yaparak diğer ekip üyelerinin değişikliklerini entegre edin.
  • Karmaşık veya büyük veritabanı değişikliklerini, ekip üyeleri arasında önceden tartışarak planlayın.

Hotfix'ler veya acil durum düzeltmeleri gerektiğinde, hızlı bir migration uygulamak ve gerektiğinde geri almak da önemlidir. php artisan migrate:rollback --step=1 komutu, yalnızca son batch'teki bir migration'ı geri almanızı sağlar, bu da daha kontrollü bir geri dönüş imkanı sunar. Canlı ortamdaki veritabanı durumunu izlemek ve migration'ların sorunsuz çalıştığından emin olmak için araçlar geliştirmek, geliştirici deneyimini önemli ölçüde iyileştirebilir. Örneğin, bir yönetici paneli üzerinden migration durumlarını gösteren ve hatta migration'ları tetiklemeye izin veren bir arayüz tasarlanabilir. Bu tür bir arayüz geliştirirken, mobil uyumluluk modern web uygulamaları için vazgeçilmezdir. Geliştiriciler, mobil cihazları üzerinden bile hızlıca kontrol ve müdahale edebilmelidir. Basit bir örnekle, responsive tasarım nasıl uygulanabilir:


Migration Adı Durum Uygulanma Tarihi
2023_01_01_100000_create_users_table Uygulandı 2023-01-01 10:05:00


Bu HTML ve CSS örneği, migration'ların durumunu gösteren bir tablonun mobil cihazlarda nasıl daha okunabilir hale getirilebileceğini göstermektedir. Bu, doğrudan migration koduyla ilgili olmasa da, Laravel'in sağladığı geliştirici araçlarının (örneğin Telescope, Horizon gibi) kullanıcı arayüzlerinin de modern standartlara uygun olması gerektiği fikrini pekiştirir. Nihayetinde, iyi yönetilen migration süreçleri, canlı uygulamalarınızın istikrarını ve geliştirme ekiplerinizin verimliliğini doğrudan etkileyen temel faktörlerden biridir.

Laravel Migrations'ın Geleceği ve Sıkça Sorulan Sorular

Laravel Migrations, yıllar içinde gelişerek daha da güçlü ve esnek hale geldi. 2025 ve sonrasında da veritabanı şema yönetimindeki merkezi rolünü sürdüreceği açık. Gelecekte, Laravel ekibinin yapay zeka destekli migration önerileri, daha akıllı hata tespiti ve hatta daha sofistike veritabanı değişikliklerini otomatikleştirme gibi yenilikleri entegre etme potansiyeli bulunuyor. Özellikle veritabanı yapısını değiştirmek ve mevcut verileri taşımak gibi karmaşık senaryolarda, otomatikleştirilmiş araçların geliştiricilere daha fazla destek sağlaması bekleniyor. Bu kapsamlı rehberde, Laravel Migrations'ın ne olduğundan temel kullanımına, gelişmiş tekniklerden deployment stratejilerine kadar birçok konuyu ele aldık. Geliştirme süreçlerinizde Migrations'ı doğru ve bilinçli bir şekilde kullanarak, veritabanı şemanızı etkili bir biçimde yönetebilir, ekip içi işbirliğini kolaylaştırabilir ve uygulamanızın uzun vadeli sürdürülebilirliğini garanti altına alabilirsiniz. Unutmayın ki, her iyi Laravel projesinin temelinde, sağlam ve iyi yönetilmiş bir veritabanı şeması yatar. Migrations, bu temeli oluşturmak için en güvenilir araçlarınızdan biridir.

Uzman İpucu: Projelerinizde sürekli olarak belirli veri tiplerini veya sütun kombinasyonlarını kullanıyorsanız, özel Blueprint macro'ları oluşturarak migration dosyalarınızı daha kısa ve okunabilir hale getirebilirsiniz. Bu, özellikle büyük ekiplerde kod tutarlılığını artırır ve tekrar eden yazım hatalarını azaltır.

Sıkça Sorulan Sorular

  1. Bir migration dosyasında birden fazla tablo oluşturabilir miyim?

    Evet, bir migration dosyasının up() metodu içinde birden fazla Schema::create() veya Schema::table() çağrısı yapabilirsiniz. Ancak, migration'ların genellikle tek bir amaca hizmet etmesi, okunabilirliği ve yönetilebilirliği artırdığı için önerilen uygulama değildir. Her tablo için ayrı bir migration oluşturmak daha iyi bir yaklaşımdır.

  2. php artisan migrate:fresh ile php artisan migrate:refresh arasındaki fark nedir?

    migrate:fresh komutu, veritabanındaki tüm tabloları tamamen siler ve ardından tüm migration'ları yeniden çalıştırır. migrate:refresh ise, tüm migration'ları down() metotlarını kullanarak geri alır ve ardından up() metotlarını kullanarak yeniden çalıştırır. migrate:fresh daha hızlı olabilir çünkü tabloları tek tek geri almak yerine doğrudan siler, ancak down() metotlarınızın doğru çalıştığından emin olmak istiyorsanız migrate:refresh daha güvenli bir seçenek olabilir.

  3. Canlı ortamda yanlışlıkla migrate:rollback yaparsam ne olur?

    Canlı ortamda migrate:rollback komutunu --force bayrağı ile çalıştırmak, en son uygulanan migration(ları) geri alır ve veritabanı şemasında yaptığınız değişiklikleri geri çevirir. Bu, eğer bu migrationlar veri kaybına yol açabilecek sütun silme gibi işlemler içeriyorsa, uygulamanızın çalışmamasına veya önemli veri kaybına neden olabilir. Bu nedenle canlı ortamda migration komutlarını çok dikkatli kullanmalı, --force bayrağını kullanmadan önce iyi düşünülmüş bir dağıtım stratejiniz olmalıdır.

  4. Migration'larımı farklı veritabanı bağlantılarına nasıl uygulayabilirim?

    Laravel, birden fazla veritabanı bağlantısını destekler. Migration'larınızı belirli bir bağlantıya uygulamak için php artisan migrate --database=your_connection_name komutunu kullanabilirsiniz. your_connection_name yerine config/database.php dosyanızda tanımladığınız bağlantı adını yazmanız yeterlidir.

Yorumlar
İçeriği beğendiniz mi? Bir tartışma başlatın veya görüşlerinizi paylaşın.
Yorum Yaz

Bir yanıt yazın

E-posta adresiniz yayınlanmayacak. Gerekli alanlar * ile işaretlenmişlerdir

E-posta Bülteni
Yazılım Topluluğuna Katılın
En son güncellemeleri, yaratıcı ipuçlarını ve özel kaynakları doğrudan e-posta kutunuza alın. Tasarım ve inovasyonun geleceğini birlikte keşfedelim.