laravel database migrations
Bu eğitimde Laravel Veritabanı işleme, Geçişler, Tohumlama, Ham SQL Sorguları, Eloquent Modelleri, Eloquent İlişkileri, Artisan ve Tinker açıklanmaktadır:
Önceki öğreticide Laravel Eğitim Serisi , Laravel Framework'ün mimarisi, kurulumu ve bileşenleri hakkında bilgi edindik. Laravel PHP Proje Yapısını detaylı olarak gördük.
Bu eğitimde Laravel Veritabanı, Geçişler, Tohumlama, Ham SQL Sorguları Çalıştırma, Eloquent Modelleri, Eloquent İlişkileri, Artisan ve Tinker konularını ele alacağız. Tüm örneklerde Laravel sürüm 7'yi kullandık.
Ne öğreneceksin:
Laravel Veritabanı Etkileşimi
Laravel Framework, veri tabanları ile etkileşime girer. akıcı sorgu oluşturucu ham SQL, ve Eloquent ORM . Aşağıdaki dört veritabanını destekler.
- MySQL sürüm 5.6+
- PostgreSQL (Postgres) 9.4+ sürümü
- SQLite sürüm 3.8.8+
- SQL Server sürüm 2017+
Projenizi MySQL Veritabanına bağlama adımları:
Aşama 1: Yeni bir tane oluştur veri tabanı isimli db_ akademi (herhangi bir uygun adı kullanabilirsiniz) aracılığıyla phpMyadmin veya HeidiSQL .
Adım 2: Adlı yeni bir proje oluşturun akademi (herhangi bir uygun adı kullanabilirsiniz).
Not:Laravel'i nasıl kuracağınızı ve yeni bir proje oluşturmayı bilmiyorsanız, lütfen önceki öğreticimiz olan Yeni Başlayanlar İçin Laravel Eğitimi 1'e bakın.
Aşama 3: Projeyi bir IDE'de açın ve .env dosya. Değerini değiştirin DB_DATABASE (veritabanı adı) db_ akademi (herhangi bir uygun adı kullanabilirsiniz). İkisi de veri tabanı ismi ve değeri DB_DATABASE içinde .env dosya aynı olmalıdır.
Not : Veritabanı yapılandırmanıza bağlı olarak DB_USERNAME, DB_PASSWOD, vb. Gibi .env dosyasındaki diğer veritabanı parametrelerini değiştirmeniz gerekebilir.
Aşağıdaki ekran görüntüsü .env dosyasındaki veritabanı yapılandırmasını gösterir.
Laravel Göçleri
Laravel Migration, bir veritabanı tablosu oluşturmak için kullanılan özel bir özelliktir. Varsayılan olarak, xxxx_xx_xx_xxxxxx _create_users_table.php dosya ve xxxx_xx_xx_xxxxxx _create_failed_jobs_table.php dosya dahildir.
Laravel Göçünün Yapısı
Laravel Migration sınıfı aşağıdaki iki yöntemi kullanır:
- Up () yöntemi: Bu yöntem, veritabanında yeni bir tablo, sütun veya dizin oluşturmak için kullanılır.
- Down () yöntemi: Bu yöntem, veritabanındaki mevcut bir tabloyu, sütunu veya dizini bırakmak için kullanılır. Bu yöntem, up () yönteminin zıt yöntemidir.
Laravel Geçişi Oluşturma
Adlı bir geçiş oluşturmak için komut isteminde aşağıdaki komutu çalıştırın. create_tutors_table .
php artisan make:migrationcreate_tutors_table
Yukarıdaki komutun yürütülmesi adında bir dosya oluşturacaktır. xxxx_xx_xx_xxxxxx_create_tutors_table.php içinde veritabanı / geçişler dizin.
Aç xxxx_xx_xx_xxxxxx_create_tutors_table.php dosyalayın ve mevcut kodu aşağıda gösterildiği gibi değiştirin.
id(); $table->string('name'); $table->string('subject'); $table->timestamps(); }); } /** * Reverse the migrations. * * @return void */ public function down() { Schema::dropIfExists('tutors'); } }
Laravel Geçişlerini Çalıştırma
Kullanılabilir tüm geçişleri çalıştırmak için komut isteminde aşağıdaki komutu çalıştırın.
php artisan migrate
Yukarıdaki komut aşağıda gösterildiği gibi veri tabanında ilgili tabloları oluşturacaktır.
Geçişlerin Geri Alınması
# 1) Son Taşıma Grubunu Geri Almak
Geri almak için komut isteminde aşağıdaki komutu çalıştırın. son geçiş grubu (tekli veya çoklu geçişleri içerebilir).
php artisan migrate:rollback
# 2) Adım sağlayan Geçişlerin Geri Alınması
Geri almak için komut isteminde aşağıdaki komutu çalıştırın. son iki göç .
php artisan migrate:rollback --step=2
# 3) Uygulamanın Tüm Geçişlerini Geri Almak
Komut isteminde aşağıdaki komutu çalıştırın. tüm geçişleri geri al uygulamanın.
php artisan migrate:reset
# 4) Tek bir komut kullanarak Geri Alma ve Taşıma
Komut isteminde aşağıdaki komutu çalıştırın. geri dön ve taşı tek bir komut kullanarak.
php artisan migrate:refresh
# 5) Geri Alma ve Taşıma sınırlı hayır. Göç sayısı
Komut isteminde aşağıdaki komutu çalıştırın. geri dönün ve son iki geçişi taşıyın tek bir komut kullanarak.
php artisan migrate:refresh --step=2
# 6) Tüm Tabloları Bırakın ve Taşıyın
Komut isteminde aşağıdaki komutu çalıştırın. tüm tabloları bırak ve taşı .
php artisan migrate:fresh
Laravel Tohumlama
Bir uygulama geliştirdiğinizde, uygulamayı test etmek için verilere ihtiyacınız vardır. Tohumlama, test verilerini veritabanına eklemek için kullanılır.
Bir Ekme Makinesi Oluşturma
Aşama 1: Adlı bir ekici oluşturmak için komut isteminde aşağıdaki komutu çalıştırın. UserSeeder .
php artisan make:seederUserSeeder
Bu komut adlı bir dosya oluşturacaktır. UserSeeder.php içinde veritabanı / tohumlar dizin.
Adım 2: Aç UserSeeder.php dosyalayın ve mevcut kodu aşağıda gösterildiği gibi değiştirin.
insert(( 'name' => Str::random(5), 'email' => Str::random(5).'@user.com', 'password' => Hash::make('password'), )); } }
Aşama 3: Aç DatabaseSeeder.php dosyası içinde veritabanı / tohumlar dizini seçin ve mevcut kodu aşağıda gösterildiği gibi değiştirin.
call(UserSeeder::class); } }
Not : DatabaseSeeder class, diğer tohum sınıflarını çağırmak için kullanılır.
Ekme Makineleri Koşu
Aşama 1: Komut isteminde aşağıdaki komutu çalıştırın. Composer’ın otomatik yükleyicisini yeniden oluştur .
composer dump-autoload
Adım 2: Komut isteminde aşağıdaki komutu çalıştırın. DatabaseSeeder sınıf.
php artisan db:seed
Yukarıdaki komutu çalıştırmak yerine, komut isteminde aşağıdaki komutu çalıştırarak UserSeeder sınıf.
php artisan db:seed --class= UserSeeder
Not : Komut isteminde aşağıdaki komutu çalıştırın. tüm tabloları bırak ve tüm geçişleri yeniden çalıştır .
php artisan migrate:fresh --seed
Aşama 3: Eklenen verileri veritabanı ile doğrulayın.
Veritabanı, çıktıyı aşağıdaki gibi gösterecektir:
Ham SQL Sorguları Çalıştırma
Bir Ekleme Sorgusu Çalıştırma
Aşama 1: Aşağıdaki kod segmentini yollar / web.php dosyasına yeni bir kayıt eklemek için öğretmenler tablo.
Route::get('/insert', function () { DB::insert('insert into tutors(name,subject) values(?,?)',('Mr John','Computer Science')); });
Adım 2: URL'yi ziyaret edin: http: //academy.test/insert
Aşama 3: Eklenen verileri veritabanı ile doğrulayın.
Veritabanı, çıktıyı aşağıdaki ekran görüntüsüne benzer şekilde gösterecektir.
Seçilmiş Bir Sorgu Çalıştırma
Aşama 1: Aşağıdaki kod segmentini yollar / web.php veri almak için dosya öğretmenler olan tablo İD eşittir iki .
Route::get('/select',function(){ $tutors=DB::select('select * from tutors where id=?',(1)); foreach($tutors as $tutor) { echo $tutor->name.' is teaching '.$tutor->;subject; } });
Adım 2: URL'yi ziyaret edin: http: /academy.test/select
Aşama 3: Tarayıcı, aşağıdaki ekran görüntüsüne benzer bir çıktı görüntüleyecektir.
Güncelleme Sorgusu Çalıştırma
Aşama 1: Aşağıdaki kod segmentini yollar / web.php kaydı güncellemek için dosya öğretmenler olan tablo İD eşittir 1 .
Route::get('/update', function(){ $tutors=DB::update('update tutors set name='Mr. Brown' where id=?',(1)); return $tutors; });
Adım 2: Aşağıdaki URL'yi ziyaret edin: http: //academy.test/update
Aşama 3: Güncellenen verileri veri tabanı ile doğrulayın.
Veritabanı, çıktıyı aşağıdaki resme benzer şekilde gösterecektir:
Silme Sorgusu Çalıştırma
Aşama 1: Aşağıdaki kod segmentini yollar / web.php dosyadaki kaydı silmek için öğretmenler olan tablo İD eşittir 1 .
Route::get('/delete',function(){ $tutors=DB::delete('delete from tutors where id=?',(1)); return $tutors; });
Adım 2: URL'yi ziyaret edin: http: //academy.test/delete
Aşama 3: Silinen verileri veritabanı ile doğrulayın.
Veritabanı, çıktıyı aşağıdaki resme benzer şekilde gösterecektir:
Laravel Eloquent Modelleri
MVC mimarisinde, karakter M duruyor Modeli . Bir model, uygulama tarafından kullanılan verileri işler. Tüm modeller uygulama dizin. Kullanıcı model ( User.php) varsayılan modeldir. Veritabanının her tablosunun karşılık gelen bir Eloquent modeli olabilir. Örneğin, Öğretmen model verileri depolar öğretmenler tablo.
Not: Sınıfın çoğul adı, aksi belirtilmedikçe tablo adı olarak kullanılacaktır.
Etkili Bir Model Oluşturma
Adlı bir model oluşturmak için komut isteminde aşağıdaki komutu çalıştırın. Özel öğretmen .
php artisan make:model Tutor
Bu komut adlı bir dosya oluşturacaktır. Tutor.php içinde uygulama dizin.
Yukarıdaki komutun yerine, aşağıdaki komutu komut isteminde çalıştırarak bir veritabanı geçişi modeli oluştururken.
php artisan make:modelTutor --migration
Veya
php artisan make:modelTutor -m
Yukarıdaki komutların her ikisi de aynı çıktıyı sağlayacaktır.
Veri Girin
Aşama 1: Aşağıdaki kod segmentini yollar / web.php dosyasına yeni bir kayıt eklemek için öğretmenler tablo.
ürün testçisi olmak istiyorum
Route::get('/insert-data',function(){ $tutor=new Tutor; $tutor->name='Mr George'; $tutor->subject='Mathematics'; $tutor->save(); });
Not : Özelliği koyun ' App Tutor'u kullan ' içinde yollar / web.php dosya aşağıda gösterildiği gibi.
Adım 2: Aşağıdaki URL'yi ziyaret edin: http: //academy.test/insert-data
Aşama 3: Eklenen verileri veritabanı ile doğrulayın.
Veritabanı, çıktıyı aşağıdaki resme benzer şekilde gösterecektir:
Veri Bul
Aşama 1: Aşağıdaki kod segmentini yollar / web.php dosyadaki kaydı bulmak / almak için öğretmenler olan tablo İD eşittir iki .
Route::get('/find-data',function(){ $tutor=Tutor::find(2); return $tutor->name; });
Adım 2: Aşağıdaki URL'yi ziyaret edin: http: //academy.test/find-data
Aşama 3: Tarayıcı, çıktıyı aşağıdaki resme benzer şekilde gösterecektir:
Veriyi güncelle
Aşama 1: Aşağıdaki kod segmentini yollar / web.php kaydı güncellemek için dosya öğretmenler olan tablo İD eşittir iki .
Route::get('/update-data',function(){ $tutor=Tutor::find(2); $tutor->name='Ms Georgina'; $tutor->subject='Computer Science'; $tutor->save(); });
veya
Route::get('/update-data',function(){ Tutor::where('id',2)-> update(('name'=>'Ms Georgina','subject'=>'Computer Science')); });
Adım 2: Aşağıdaki URL'yi ziyaret edin: http: //academy.test/update-data
Aşama 3: Güncellenen verileri veri tabanı ile doğrulayın.
Veritabanı, çıktıyı aşağıdaki resme benzer şekilde gösterecektir:
Verileri Sil
Aşama 1: Aşağıdaki kod segmentini yollar / web.php dosyadaki kaydı silmek için öğretmenler olan tablo İD eşittir iki .
Route::get('/delete-data',function(){ $tutor=Tutor::find(2); $tutor->delete(); });
Adım 2: Aşağıdaki URL'yi ziyaret edin: http: //academy.test/delete-data
Aşama 3: Silinen verileri veritabanı ile doğrulayın.
Veritabanı, çıktıyı aşağıdaki resme benzer şekilde gösterecektir:
Yumuşak Silme Verileri
Veri tabanından veri silmek yerine, yazılımla silme, delete_at modele yerleştirin ve veritabanı tablosuna ekleyin.
Yazılımla silmeyi etkinleştirmek için aşağıdaki özelliği kullanın.
Illuminate Database Eloquent SoftDeletes
Verileri yazılımla silmek için aşağıdaki kod segmenti kullanılabilir.
Route::get('/soft-delete-data',function(){ Tutor::find(1)->delete(); });
Yumuşak Silme Verilerini Alın
withTrashed () yöntem için kullanılabilir yumuşak silme verileri al Aşağıda gösterildiği gibi.
Route::get('/read-soft-delete-data',function(){ $tutor=Tutor::withTrashed()->where('id',1)->get(); return $tutor; });
Yumuşak Silme Verilerini Geri Yükleme
onarmak() yöntem için kullanılabilir yumuşak silme verilerini geri yükle Aşağıda gösterildiği gibi.
Route::get('/restore-data',function(){ Tutor::withTrashed()->where('id',1)->restore(); });
Verileri Kalıcı Olarak Sil
forceDelete () yöntem için kullanılabilir verileri kalıcı olarak sil Aşağıda gösterildiği gibi.
Route::get('/force-delete-data',function(){ Tutor::onlyTrashed()->forceDelete(); });
Laravel Eloquent İlişkileri
Etkili bir ilişki, veritabanı tablolarının kolayca bağlanmasına yardımcı olur.
Eloquent İlişki Türleri
Aşağıdaki liste, farklı türden anlamlı ilişki türlerini gösterir:
- Bire bir ilişki
- Bire çok ilişki
- Çoktan çoğa ilişki
- Bire bir ilişki var
- Çok yönlü ilişki var
- Bire bir (polimorfik) ilişki
- Birden çoğa (polimorfik) ilişki
- Çoktan çoğa (polimorfik) ilişki
# 1) Bire Bir İlişki
Açıklama: Farklı tabloların sütunları arasındaki bire bir ilişkidir.
Bire bir ilişki örneği:
hasOne('AppBook); } }
Bire bir ilişki (ters) örneği:
belongsTo('App Author); } }
# 2) Bire Çoğa İlişki
Açıklama: Bu tür bir ilişkide, bir model herhangi bir sayıda başka modele sahiptir.
Bire çok ilişki örneği:
hasMany('AppReview'); } }
Bire çok ilişki (ters) örneği:
belongsTo('AppTutorial'); } }
# 3) Çoktan Çoğa İlişki
Açıklama: Bu bire bir ve bire çok ilişkilerden daha karmaşık bir ilişkidir ve böyle bir ilişkiyi tanımlamak için bir pivot tablo oluşturmanız gerekir.
Çoktan çoğa ilişki örneği:
belongsToMany('AppBook); } }
Çoktan çoğa (ters) ilişki Örnek:
belongsToMany('AppAuthor); } }
# 4) Tek Geçişli İlişki
Açıklama: Modelleri tek bir ara ilişki aracılığıyla birbirine bağlar.
Tek-geçişli ilişki örneği:
hasOneThrough('AppOwner', 'AppCar'); } }
# 5) Çok Sayıda İlişki Var
Açıklama: Kolay bir yöntemle uzak veya orta ilişkilere erişim sağlar.
Çok yönlü ilişki örneği:
hasManyThrough('AppBook, 'AppAuthor); } }
# 6) Bire Bir (Polimorfik) İlişki
Açıklama: Bire bir ilişkiye benzer, ancak hedef model tek bir ilişkilendirmede birden fazla model türüne ait olabilir.
Bire bir (polimorfik) ilişki örneği:
morphTo(); } } class Article extends Model { /** * Get the article's image. */ public function image() { return $this->morphOne('AppImage', 'imageable'); } } class Author extends Model { /** * Get the author's image. */ public function image() { return $this->morphOne('AppImage', 'imageable'); }
# 7) Bire Çok (Polimorfik) İlişki
Açıklama: Bire çok ilişkisine benzer, ancak hedef model tek bir ilişkilendirmede birden fazla model türüne ait olabilir.
Birden çoğa (polimorfik) ilişki örneği:
morphTo(); } } class Article extends Model { /** * Get all of the article's comments. */ public function comments() { return $this->morphMany('AppComment', 'commentable'); } } class Audio extends Model { /** * Get all of the audio’s comments. */ public function comments() { return $this->morphMany('AppComment', 'commentable'); } }
# 8) Çoktan Çoğa (Polimorfik) İlişki
Açıklama: Bu tür bir ilişkide, hedef modelin diğer modeller arasında paylaşılabilecek benzersiz kayıtları vardır.
Çoktan çoğa (polimorfik) ilişki örneği:
morphToMany('AppComment, commentable); } }
Laravel Ustası
Önceki eğitimde şunu öğrendik: Zanaatkar bir komut satırı arayüzü ( CLI ).
Zanaatkar Komutları
Tüm mevcutları görüntülemek için komut isteminde aşağıdaki komutu çalıştırın. Zanaatkar komutları .
php artisan
Aşağıdaki ekran görüntüsü, yukarıdaki komutun çıktısını gösterir.
Aşağıdaki tablo, yukarıdaki komutun (php artisan) çıktısından alınan ilgili işlevleriyle birlikte bazı önemli esnaf komutlarını göstermektedir.
Komut işlevsellik önbellek: temizle Uygulama önbelleğini temizleyin Yardım Edin Bir komut için yardım görüntüler liste Komutları listeler göç Veritabanı geçişlerini çalıştırın Ölçek Uygulama testlerini çalıştırın tamircilik Uygulamanızla etkileşim kurun kimlik doğrulama: sıfırlama sıfırlama Süresi dolmuş şifre sıfırlama jetonlarını temizleyin db: tohum Veritabanını kayıtlarla tohumlama etkinlik Listesi Uygulamanın olaylarını ve dinleyicilerini listeleyin anahtar: oluşturmak Uygulama anahtarını ayarlayın make: channel Yeni bir kanal sınıfı oluşturun yapmak: bileşen Yeni bir görünüm bileşeni sınıfı oluşturun yapmak: denetleyici Yeni bir denetleyici sınıfı oluşturun make: olay Yeni bir olay sınıfı oluşturun yapmak: fabrika Yeni bir model fabrikası oluşturun make: dinleyici Yeni bir olay dinleyici sınıfı oluşturun make: mail Yeni bir e-posta sınıfı oluşturun yapmak: ara yazılım Yeni bir ara katman yazılımı sınıfı oluşturun make: migration Yeni bir geçiş dosyası oluşturun yapmak: model Yeni bir Eloquent model sınıfı oluşturun yapmak: bildirim Yeni bir bildirim sınıfı oluşturun yapmak: gözlemci Yeni bir gözlemci sınıfı oluşturun make: policy Yeni bir politika sınıfı oluşturun make: provider Yeni bir servis sağlayıcı sınıfı oluşturun make: resource Yeni bir kaynak oluştur yapmak: ekme makinesi Yeni bir ekme sınıfı oluştur test yapmak Yeni bir test sınıfı oluşturun geçiş: taze Tüm tabloları bırakın ve tüm geçişleri yeniden çalıştırın geçiş: yenileme Tüm geçişleri sıfırlayın ve yeniden çalıştırın taşıma: sıfırlama Tüm veritabanı geçişlerini geri alın taşıma: geri alma Son veritabanı geçişini geri alın bildirimler: tablo Bildirimler tablosu için bir geçiş oluşturun rota: liste Kayıtlı tüm rotaları listeleyin depolama: bağlantı Uygulama için yapılandırılmış sembolik bağları oluşturun
Laravel Tinker
Tinker, komut satırındaki uygulamayla etkileşim kurmanıza izin veren bir REPL (READ-EVAL-PRINT-LOOP). Tamircilik rotaları kaydetmeden bir veritabanı ile etkileşime girer.
Artisan ile Tinker kullanımı ve varsayılan olarak içerir.
Tinker Ortamını Etkinleştirme
Tinker ortamını etkinleştirmek için komut isteminde aşağıdaki komutu çalıştırın.
php artisan tinker
Aşağıdaki ekran görüntüsü, yukarıdaki komutun çıktısını gösterir.
Tinker ile Veri Ekleme
Yeni bir kayıt eklemek için komut isteminde aşağıdaki komutları çalıştırın. kullanıcılar tablo.
$user = new AppUser; $user->name = 'User A'; $user->email = 'usera@user.com'; $user->password = 'user123'; $user->save();
Veritabanı, çıktıyı aşağıdaki ekran görüntüsüne benzer şekilde gösterecektir.
Tinker ile Veri Bulun
Bir kaydı olan kaydı bulmak / almak için komut isteminde aşağıdaki komutu çalıştırın. İD eşittir iki içinde kullanıcılar tablo.
$user = AppUser::find(2);
Komut istemi, çıktıyı aşağıdaki ekran görüntüsüne benzer şekilde gösterecektir.
Tinker ile Verileri Güncelleyin
Kayıtlı kaydı güncellemek için komut isteminde aşağıdaki komutu çalıştırın. İD eşittir iki içinde kullanıcılar tablo.
$user = AppUser::find(2); $user->name = 'User B'; $user->email = 'userb@user.com'; $user->save();
Veritabanı, çıktıyı aşağıdaki ekran görüntüsüne benzer şekilde gösterecektir.
Tinker ile Verileri Silin
uygulama desteği mülakat soruları ve cevapları pdf
Kayıtlı kaydı silmek için komut isteminde aşağıdaki komutu çalıştırın. İD eşittir iki içinde kullanıcılar tablo.
$user = AppUser::find(2); $user->delete();
Veritabanı, çıktıyı aşağıdaki ekran görüntüsüne benzer şekilde gösterecektir.
Sonuç
Laravel Framework, ham SQL, akıcı sorgu oluşturucu ve Eloquent ORM kullanarak veritabanları ile etkileşime girer. Bir model, uygulama tarafından kullanılan verileri işler. Etkili bir ilişki, veritabanı tablolarının kolayca bağlanmasına yardımcı olur.
Taşıma, bir veritabanı tablosu oluşturmak için kullanılan özel bir özelliktir. Oluşturma, geliştiricinin geliştirirken uygulamayı test etmek için verilere ihtiyacı olduğu için geliştirici için çok yararlı olan test verilerini veritabanına eklemek için kullanılır. Tinker, rotaları kaydetmeden bir veritabanı ile etkileşime girer.
Bu öğreticiyi faydalı bulduğunuzu umuyoruz! Bir sonraki eğiticide, formları, dosya yüklemeyi, kimlik doğrulamayı, e-posta göndermeyi, oturumları vb. Tartışacağız.
İyi öğrenmeler!
<< PREV Tutorial | SONRAKİ Eğitim >>
Önerilen Kaynaklar
- Laravel Koleksiyonu ve Laravel Forge Eğitimi
- Laravel Formları ve Örneklerle Doğrulama Kuralları
- Laravel Oturumu, Dosya Yükleme / İndirme ve İzinler
- Yeni Başlayanlar İçin PHP Laravel Eğitimi: Laravel Framework Nedir
- MongoDB Veritabanı Yedeklemesi Oluştur
- JMeter ile Veritabanı Testi
- Oracle Veritabanı Eğitimi - Oracle Veritabanı Nedir?
- Karmaşık Veri Modelleri Oluşturmak için En İyi 10 Veritabanı Tasarım Aracı