micsoa
Arkadaşlar herkese selam , laravel yeni başladım , cogu seyı anlayarak gidiyorum ama şu migration olayını çözemedim,
mantığı nedir , neden kullanılır , kullanmak zorunda mıyız ? tecrübelerinizi paylaşırsanız sevinirim..
Migration'u araştırırken schema çıktı karşıma o konuda da yardımcı olursanız sevinirim..
xsearch
Migrasyon sisteminizdeki veritabanınızı oluşturmaya yada güncellemeye yarayan yapı.
Migrasyon kullanmak zorunda değilsiniz. Ancak projeniz büyüyecekse migrasyonla değişiklikleri güncellemek daha kolay olacaktır.
Kendi projenizi yazdınız. 2 seçenek vardır.
a) veritabanından db'yi dışarı aktarıp kurulumda içeri aktarmak
b) sql sorgularını direkt php üzerinden çalıştırmak.
migrasyonlar php üzerinden bu sorguları çalıştırırlar. Larevel sadece "mysql" ile çalışmak zorunda değil, aynı şekilde sqllite ile kullanabilirsiniz mesela. Bunu da ORM yapısına borçlu.
schema veritabanının özelliklerini belirdediğiniz yapı. yani create table .... yerine schema ile oluşturuyorsunuz ki farklı tablo oluşturma komutu kullanan diğer db sunucularda da kullanılabilsin.
ORM (object relational mapping) , DBAL (Database Absteaction Layer) kavramlarını araştırmanı öneririm. Bu kavramlar hem migrasyonlarda hemde Lareveldeki veritabanı işlemlerinde işine yarayacaktır.
micsoa
teşekkür ederim yaparak öğrenicem sanırım çünkü bir yerden sonra uygulamadan anlaşılmıyor..
Aristona
Ben Migrationları şu şekilde yazıyorum. Müşteriler bir proje istediğinde db yedeğini vermektense, Laravel dosyalarını sunucuya upload ettikten sonra otomatik olarak "Yükleyici" controller çalışıyor. Burada kullanıcı admin bilgilerini girdikten sonra "Kur" butonuna tıklıyor ve migrationlar çalışıyor. Böylece veritabanı tertemiz olarak kuruluyor.
Migrationların bir avantajı da yama yapmada kolaylık sağlaması. İleride bir müşterin güncelleme istese ve kullanılan bir tabloya, örneğin makaleler tablosuna okunma_sayısı hücresinin eklenmesini istese sen bunu yaparken çok zorlanacaksın. Bu durumda DB yedeği veremezsin çünkü müşterinin yazdığı makaleler gidebilir. (import esnasında) Ben bunun için şöyle bir mantık kullanıyorum. /database/updates adında bir klasör oluşturdum ve bunu composer'a autoload ettirdim. Şuan bir güncelleme yapılacaksa gerekli migrationu updates klasörü içine atıp müşterime veriyorum. Controlleri hazır olduğu için müşteri admin paneline girdikten sonra "Yazılımı güncelle." butonuna tıklıyor ve yama migrationu çalışıyor, böylece kullanıcının veritabanı güncellenmiş oluyor. Bu controllerin yaptığı iş Artisan::call('migrate', array('path' => '../database/updates/'))'i çağırmak.
Bildiğim kadarıyla halihazırdaki veritabanı tablolarından otomatik olarak migration çıktısı alan bir package vardı. Adını unuttum. Herşeyi elle geçirmektense onu kullanabilirsiniz şimdiki projenizde.
micsoa
güzel bir kullanım şekli , teşekkürler
micsoa
3 gündür araştırdığım ve kullandığım kadarıyla migration ve schema olayını biraz anlatıyım belki birilerine yardımcı olur(en azından yeni başlayanlara) yanlışım varsa tecrübeli arkadaşlar düzeltsin :
- migration ve schema ile phpmyadmin ya da herhangi bir gui ile hiçbir işlem yapmadan veritbanında table ve columnlar oluşturabiliyoruz ve bunları çok rahat bir şekilde kontrol edebiliyoruz..
- Schema bölümü veritabanımızın structure ( yapı ) bölümü oluyor , burada table'ımızın yapısını tek tek oluşturuyoruz, bunu da yazmak için schema'nın kendine özel bir yapısı var, bu da laravel dökümantasyonunda mevcut.
- migration ise artisan kullanarak veritabanımızı kullanabiliceğimiz komutların işlediği yer oluyor..
- Kullanım ise ; önce artisan migration komutları ile herhangi bir table'ı create ederek , o table ile ilgili migrationumuzu oluşturuyoruz , ve bu oluşturduğumuz migrationun içine girip oluşturacağımız table'a yönelik schemayı oluşturuyoruz , sonra terminalden php artisan migrate yazarak oluşturduğumuz table'ı veritabanımıza işliyoruz.
- zaten kullanan arkadaşlar yukarda avantajlarını yazmışlar , alışmak biraz zor gibi ama alışınca da manuel olarak database kullanmaktan çok daha rahat ve esnek olabileceği görüşündeyim...
MURATSPLAT
Diğer bir avantajı da veritabanından bir nebzede olsa bağımsız oluyorsunuz. Laravel'in desteklediği tüm veritabanlarını kullanmak için laravelin arayüzlerini kullanıyorsunuz. pgsql, mssql, ya da sqlite kullanmak için özel söz dizimlerini veya yöntemlerini bilmek zorunda kalmıyorsunuz. Teori de olduğu gibi uygulama da böyle mi denemek lazım. Tecrübe edenler varsa da buyursun.