SQL çok iyi bilmem zira Eloquent bilen birisi ihtiyaç duymaz. Ama ON DELETE CASCADE tanımlaması SQL var olan bir tanımlama ve bunun aslında Eloquent ORM paketi ile bir alakası yok.
ON DELETE CASCADE anlamak için şuradaki örneğe bakabilirsiniz:
http://www.mysqltutorial.org/mysql-on-delete-cascade/
Scheme Builder ile yapılan migrationlarında Eloquent ile doğrudan bir ilişkisi yok. Migrationlar veritabanında yapılan değişikleri kayıtlı bir şekilde geçmişe dönük olarak yapılmasıdır aslında.
Pratikte basit bir uygulama yazdığınızı düşünün. Bu uygulamada sadece user tablosu olsun. Bunu uygulamayı geliştirirken migtration ile oluşturdunuz. Sonrasında User modelinizi yazdınız en sonunda uyguma bitti ve internette yayınlamak için sunucuya attınız.
3-4 gün sonra user modeline hasMany ilişkisi olaran bir articles tablosu oluşturup kullanıcının makele oluşturabildiği bir yapıyı uygulamanıza eklemek istediniz. Bu durumda geliştirme ortamınınzda veritabanı değişikliği yapacaksnız yeni migration dosyası oluşturursunun artisan ile. Sonra diğer değişikleri bitirdikten sonra son güncellemeleri sunucuya atarsınız. Ama Bir sorun var veritabanı değişikleri nasıl sunucuda uygulanacak. Elbette bunun için phpmyadmin ya da mysql-cli ile uğraşmayacaksınız. Articles migration sınıfları zaten projede var olduğu için sunucuda ssh erişim sağlayarak. "php artisan migrate" komutlarını çalıştıracaksınız.
Bu sayede veritabanın değişiklikler sunucunuzdaki veritabanına aktarılacak.
Burada dikkat etmeniz gereken şu noktalar var. php artisan migrate komutu hata affetmez. Bu nedenle mutlaka uygulamanızı sunuya taşımadan önce mutlaka mevcut veritabanının yedeğini alın. Bir de mümkün olduğunda migration sınıflarını test ederek doğru çalıştığından emin olun. Zira hatalı bir migration sınıfı diğer migrationların yüklenmesini engelleyebilir..
Migrationların en kolay test etme yolu yazılan migrationu yüklemek - php artisan migrate - ve sonrasında "php artisan migrate:rollback" ile yapılan değişikleri geri almaktır. Hata yoksa sonrasında tekrar "php artisan migrate" derseniz ve hata almaz iseniz muhtemelen hata yapmamışsınızdır. Not: bunu asla production ortamında denemeyin!
Laravel'deki Eloquent konusu sanırım geliştiricilerin öğrenmekte ve kavramakta en zor olduğu konu. Ben de baya bocalamıştım. Ama öğrendikten sonra sql kullanılmadan yapılan işleri görünce iyi ki bu meredi öğrenmişim diyorsunuz." Laravel ile 4. projemi bitirmek üzereyim. Hiçbirinde tek satır sql komutu yazmadım. Büyük konfor..