Laravel Model Yapısı ve Kullanımı

Merhaba Mobilhanem.com takipçileri,
Laravel ile eğitim serimizin yeni dersinde Laravel Model yapısını anlatmaya çalışacağım.

Laravel Model Nedir?

Laravel Model, MVC yapısında veritabanı işlemlerinin yapıldığı bölümdür. Daha önceki yazılarımdan birinde Controller yapısından bahsederken, backend işlemlerinin de Controller tarafından yapıldığından bahsetmiştim. Controller, Model aracılığı ile bu işlemleri yapmaktadır. Yani Model, veritabanı iletişiminden sorumlu kısımdır.

Artisan Kullanarak Model Oluşturma

Daha önceki yazılarımda bahsettiğim gibi Laravel Artisan CLI bizim işimizi kolaylaştırmaktadır. Bu komut satırını öğrenmenin hız kazanma adına yararı olduğunu düşünüyorum. Artisan kullanarak Laravel Model oluşturmak için öncelikle komut satırı kullanarak Laravel ana dizine erişiyoruz. Benim bilgisayarım için bu adres;

“C:\xampp\htdocs\mobilhanem>”

Daha sonra aşağıda yer alan kod bloğunu yazıyoruz(ya da kopyala yapıştır yapıyoruz).

php artisan make:model Page

Yukarıda yer alan kod satırı sayesinde ‘Page’ Model dosyasını oluşturuyoruz. Model oluşturma başarı ile sonuçlandıysa app klasörünün altında Page isimli bir dosya olmuşması gereklidir.

laravel model oluşturma
laravel model oluşturma

Tabi burada unutmamamız gereken Model ile kullanılacak veritabanı tablosununda olması. Bu işlem için isterseniz manuel olarak bir tablo oluşturabilirsiniz ya da yine Artisan kullanarak Migration oluşturabilirsiniz.Henüz Migration yapısından bahsetmediğimiz için biz bu yazıda manuel olarak bir tablo oluşturalım. Veritabanı değişkenlerini .env dosyasından alacağız buradaki değişikliklerin yapılmış olmasına dikkat edelim. Eğer .env size yabancı geldi ise 4 – Laravel Dersleri – Laravel Konfigürasyonu yazıya bir göz atmanızı tavsiye ederim.

Yine kendi kurulumuma göre benim .env dosyamdaki veritabanı ile ilgili kısım şu şekildedir;

DB_CONNECTION=mysql
DB_HOST=127.0.0.1
DB_PORT=3306
DB_DATABASE=mobilhanem
DB_USERNAME=root
DB_PASSWORD=

tabi lokal bir kurulum olduğu için şifre kısmı boş bırakılmıştır. Gerçek sunucuda bu bölümün güçlü bir şifre ile dolu olması gereklidir.

Phpmyadmin yardımı ile mobilhanem adlı bir veritabanı oluşturup içerisine pages tablosunu ekledim. Tablo yapısı ise

id => int 11, primary key, autoincrement

baslik => varchar 100

icerik => text

aktif => int 1, default 0

Burada Laravel Model için önemli bir konuya dikkat etmeniz gerekmektedir. Oluşturduğunuz Model adı ile veritabanındaki tablo arasında bir ilişki vardır. Bu ilişki oluşturduğunuz tablonun, Model isminin küçük harf ile başlayan ve İngilizce olarak çoğul yapılmış hali olmasıdır.

Page (model) => pages (tablo)

City (model) => cities (tablo)

Peki bu şart mı? tabi ki hayır fakat proje takip edilebilirliği ve hız bakımından tavsiye edilen methoddur. Diyelim ki siz bunu yapmak istemiyor veya daha önceki projenizi Laravel yapısına taşımak istiyorsunuz. Tablo isminizi ‘sayfalar’ olarak kullanmak için Laravel Model içerisine  $table değişkeni belirtmeniz gerekli.

protected $table = 'sayfalar';

Yine aynı şekilde Primary Key olarak id kullanmayacaksanız eğer onu da,

protected $primaryKey = 'sayfa_id';

olarak belirtmeniz gerekli.

Yukarıda bahsettiğim gibi bu yazıda Migration yapısını anlatmayacağım fakat Migration kullanarak oluşturulan tablolarda timestamps değişkeni vardır. Bu değişken tablonuza ‘created_at’ ve ‘updated_at’ kolonları ekler. Biz manuel oluşturduğumuz tablomuza bunları eklemediğimiz için Model yapımıza bunları tabloda aramaması gerektiğini söylememiz gerek. Yoksa Model hata oluşturacaktır. Bunun için,

public $timestamps = false;

satırı Model içerisine eklememiz gereklidir.

Laravel Model yapısında hangi kolonun yazılabilir olduğu sizin tarafınızdan mutlaka belirtilmelidir. Yukarıdaki örnek tablomuzda ‘aktif’ kolonunun değiştirilmesini istemediğimizi düşünürsek bunun için Model içerisine

protected $fillable = ['baslik','icerik'];

Burada gördüğünüz gibi ‘aktif’ ve ‘id’ kolonlarımız yok. Bunların olmaması Laravel sistemine bunların manipüle edilmemesi gerektiği, korunması gerektiğini belirtir. Yani buraya yazmadığımız kolonlar Controller ile değiştirilemez. Laravel için bu bir çeşit güvenlik önlemidir ve bu önlem Mass Assignment olarak adlandırılır.

Eğer biz tüm alanların değiştirilebilir olmasını istiyorsak ya da sadece ‘id’ kolonunun korunmasını istiyorsak ve tablomuzda 30 adet kolon varsa bunu tek tek yazmamız mı gerekecek? Tabi ki hayır. Sürekli bizim iyiliğimizi düşünen Laravel bunun içinde çözüm oluşturmuş ‘guarded’.

protected $guarded = [];

ya da 

protected $guarded = ['id'];

Bu şekilde belirttiğimiz kolonlar harici olanların hepsinin değiştirilebilir olduğunu belirtmiş oluyoruz.

Son olarak yukarıdaki kod satırlarının Model içerisindeki yerleşimi aşağıda yer alan resimdeki gibi olmalıdır.

laravel model son hali
laravel model son hali

Mobilhanem.com için yazdığım bu eğitimde temel olarak Laravel Model yapısını tanımlamak ve Laravel ile gelen Artisan (CLI) komut satırı kullanarak Model oluşturmayı anlatmaya çalıştım. Daha fazla detaylı bilgi için laravel dökümanından yararlanabilirsiniz.

Tüm Laravel Derslerimiz için tıklayınız.

Mobilhanem.com üzerinden yayınladığım laravel eğitimlerine devam edeceğiz. Yazımız ile ilgili tüm sorularınızı yorum bölümden ulaştırabilirsiniz. Bunun dışındaki diğer sorularınız için sorucevap.mobilhanem.com sitesini kullanabilirsiniz.

Umarım sizin için yararlı olmuştur. Okuduğunuz için teşekkürler. Daha fazla kişinin okuması için paylaşmayı unutmayın…

144

Onur Üre

Aslen jeoloji mühendisi olup hiç mesleğini yapmaya fırsat bulamayan ve gönlünde hep bilgisayar ve programlama olan, evden (home-office) çalışma şekline bayılan, evli, 2 kedi ve 1 tavşan babası, sokaktaki her köpek, kedi, kuşun abisi olmaya çalışan biriyim. Lütfen bir kap su bir kap yemek her köşe başına...

13 Yorum

Haftalık Bülten

Mobilhanem'de yayınlanan dersleri haftalık mail almak ister misiniz?