Laravel Migration ve Model Oluşturma

Laravel Migration ve Model Oluşturma

Hepinize merhaba dostlarım 😊. Yine bir pazar günü ve yeni bir konu ile sizlerin karşınızdayım. Evet farkındayım hepimiz için yoğun bir hafta oldu ve haftasonu tatilinin güzel günlerinden ve haftanın Z raporunu yaptığımız günlerden birisi olan Pazar gününde harika bir konu olan Laravel Migration ve Model Oluşturma konusu ile karşınızdayım

şimdi aklınızda olan soruyu da bildiğime göre hemen sözü daha fazla uzatmadan konumuza girişimizi yapalım

Nedir bu Migration ve Model ?

Eveeet dostlarım artık konumuza girişimizi yapmış bulunmaktayız. Şimdi her zamankinden farklı olarak bu kısımda biraz teorik bir anlatıma giriş yapacağım. 

Migration bizim laravel uygulamalarımızda veri tabanı oluşturduğumuzda phpMyAdmin kısmına yani MySQL e giriş yapmadan bize tablo ve kolonların oluşturulmasını sağlıyor. Günlük hayattan örnek verecek olursak dostlarım bir uygulama yazdınız varsayalım. Burada veri tabanındaki kolonları, tabloları migration ile oluşturdunuz diyelim. Bilgisayarınızda teknik bir arıza sonrasında sizin bu proje kodlarınızı alıp (tabi içerisinde migration vs oluşturmuşsanız) diğer bilgisayarda kurulumları vs yaptığınızda ve oluşturduğunuz migration dosyalarını çalıştırdığınızda veri tabanına otomatik olarak gelecektir. Ama migration oluşturmadan kendiniz manuel olarak yapmışsanız bütün işlemleri işte o an bilgisayarda kodlama yaparken veri tabanınızı çok ama çok dikkatli bir şekilde korumanızı öneririm. Çünkü herhangi bir teknik arıza sonrasında bu veri tabanı ve tablolar giderse projenin gidişatına bakıp kendiniz o tabloları yeniden oluşturmak zorunda kalacaksınız 😊. Migration kısmına ufakça değindiğimize göre gelelim şimdi model kısmı nedir ona bir bakalım

Model kısmına bakacak olursak dostlarım bizim laravel uygulamamız üzerinde veri tabanı işlemleri yapmamıza olanak sağlayan bir yapıdır. Şimdi aklınızda şu sorunun belirdiğini taaa buradan seziyorum 😊

E hocam biz zaten veri tabanına ekleme yapmıyor muyduk ? Neden yeni yeni terimler çıkartıyorsunuz 😄

gibi sorular var. Şimdi size ben şöyle özetleyim. Normalde 

public function store(){
      $data = [
         "baslik" => "MFSoftware Blog",
         "link" => mfsoftware.net
      ];
      DB::table('menuler')->insert($data);
}

şeklinde kayıt yaparken (Fark ettiyseniz table kısmını yazıp menuler diyerek hangi tabloda işlem yapacağımızı belirttik) model kullandığımızda daha hızlı bir şekilde

public function store(){
      $data = [
         "baslik" => "MFSoftware Blog",
         "link" => mfsoftware.net
      ];
      MenulerModel::create($data);  // BU KADAR BASİT :)
}

kodlarda göründüğü gibi daha kısa bir şekilde ekleme işlemini gerçekleştiriyoruz. Yani uzun uzun önce hangi tabloda işlem yapacağımızı daha sonra da hangi işlemi uygulayacağımızı vs gibi bir zahmete giriş yapmıyoruz tamamen pratikleşiyoruz 😊. (Bu kısma takılmayın ileride Eloquent ORM ile işlemler yapacağız 😊)

Çenemin düştüğünün farkındayım dostlarım o halde sözü daha fazla uzatmadan hemen kodlama kısmına geçişimizi yapalım

Migration ve Modelimizi Oluşturalım 

Öncelikle dostlarım terminalimizi açtık ve

laravel new project

şeklinde kodumuzu yazdık ve projemiz indi 😊. Daha sonrasında ise MySQL bağlantımızı yapalım. Öncelikle bir veri tabanı oluşturalım. Ben migration-model isminde bir veri tabanı oluşturduk. Daha sonrasında ise .env dosyasına girip bağlantı işlemlerini gerçekleştirelim

DB_CONNECTION=mysql
DB_HOST=127.0.0.1
DB_PORT=3306
DB_DATABASE=migration-model
DB_USERNAME=root
DB_PASSWORD=12345678

şeklinde bağlantımızı yazdık dostlarım. Daha sonrasında ise örnek olarak bir migration ve model oluşturalım. Bunu nasıl yapacağız diye merak ediyorsanız dostlarım

php artisan make:model KullaniciModel -m

şeklinde kodumuzu yazdığımızda database/migrations dosya yolu içerisinde 2021_10_02_162136_create_kullanici_models_table.php şeklinde bir dosya oluşacaktır. Dosyanın içerisine baktığımızda ise

<?php

use Illuminate\Database\Migrations\Migration;
use Illuminate\Database\Schema\Blueprint;
use Illuminate\Support\Facades\Schema;

class CreateKullaniciModelsTable extends Migration
{
    /**
     * Run the migrations.
     *
     * @return void
     */
    public function up()
    {
        Schema::create('kullanici_models', function (Blueprint $table) {
            $table->id();
            $table->timestamps();
        });
    }

    /**
     * Reverse the migrations.
     *
     * @return void
     */
    public function down()
    {
        Schema::dropIfExists('kullanici_models');
    }
}

şeklinde kodların olduğu bir dosya bizi karşılayacaktır. Şimdiiii gelin burada biraz oynamalar yapalım. Kullanıcı tablosu oluşturacağımıza göre tabloyla alakalı verilerin tutulacağı alanları, veri tiplerini ve oluşturacağımız tablo adını girmemiz gerekecektir. Gelin hemen hızlıca bunları ayarlayalım

<?php

use Illuminate\Database\Migrations\Migration;
use Illuminate\Database\Schema\Blueprint;
use Illuminate\Support\Facades\Schema;

class CreateKullaniciModelsTable extends Migration
{
    /**
     * Run the migrations.
     *
     * @return void
     */
    public function up()
    {
        Schema::create('kullanicilar', function (Blueprint $table) {
            $table->id();
            $table->string('nick')->nullable();
            $table->string('name')->nullable();
            $table->string('surname')->nullable();
            $table->string('email')->nullable();
            $table->tinyInteger('durum')->default(1)->nullable();
            $table->tinyInteger('sira')->default(0)->nullable();
            $table->timestamps();
        });
    }

    /**
     * Reverse the migrations.
     *
     * @return void
     */
    public function down()
    {
        Schema::dropIfExists('kullanicilar');
    }
}

şeklinde değişikliklerimizi yaptık. Şimdiiii aklınızda olan soruya gelelim

Hocam bazı değişik fonksiyonlar var orada string, tinyInteger, timestamps, default, nullable falan nedir hocam 😊

şeklinde sorularınızın olduğunu biliyorum. Şimdi ben de cevabı bir tablo üzerinden vereyim

Fonksiyon Karşılığı
string() MySQL üzerindeki VARCHAR veri tipinin karşılığı
tinyInteger() MySQL üzerindeki TINYINT veri tipinin karşılığı
timestamps() MySQL üzerinde created_at, updated_at alanları oluşturur
default() Kolona veri girilmediği taktirde default olarak eklenecek olan veri
nullable() Belirtilen kolonun null değer alacağını ayarlamamıza yarar

şeklinde kodlarımızı yazdık. Daha sonrasında dostlarım terminal kısmımıza gelip 

php artisan migrate

komutumuzu yazıp çalıştıralım. Daha sonrasında ekranımıza gelecek olan sonuç

şeklinde olacaktır. Bu kısımda diğer migration dosyaları da mevcut dostlarım onlar bize laravel tarafından verilen migration dosyalarıdır. Onlara aldırış etmeyelim çünkü onları şu an biz oluşturmadık hazır geldi 😅. Şimdiii bu kısmı da gördüğümüze göre MySQL e gelip bakalım gerçekten kullanicilar tablomuz oluşturuldu mu bir bakalım

şeklinde tablolarımız oluşmuş bu süper bişey 😊. Şimdi bu tablomuzun içeriğine bakalım bir sıkıntı ve var mı bakalım

şeklinde buraya da baktık ve 10 numara 5 yıldız bir sonuç olmuş. Şimdiii bu kısmı da yaptığımıza göre gelelim oluşturduğumuz KullaniciModel dosyamıza 😊. Bunun için hemen App/Models altındaki KullaniciModell.php dosyası içerisine gelelim. İçerisi bizi

<?php

namespace App\Models;

use Illuminate\Database\Eloquent\Factories\HasFactory;
use Illuminate\Database\Eloquent\Model;

class KullaniciModel extends Model
{
    use HasFactory;
}

şeklinde karşılayacaktır dostlarım 😊. Şimdiii biz oluşturduğumuz bu modelimizi veri tabanımıza veri eklememiz için kullanacağımızdan dolayı bazı ayarlamalar yapacağız. Bunun için bu dosyamızın içerisine

<?php

namespace App\Models;

use Illuminate\Database\Eloquent\Factories\HasFactory;
use Illuminate\Database\Eloquent\Model;

class KullaniciModel extends Model
{
    use HasFactory;

    protected $table = "kullanicilar";  // TABLOMUZUN İSMİ
    protected $guarded = [];    // TABLOMUZUN HER HUCRESİNDE VERİ İŞLEMLERİ YAPMAMIZA YARAR
}

şeklinde düzenlemeleri yapalım dostlarım 😊. Artık her şey tamamdır 😊. Proje bizden sadece ve sadece database işlemlerini yapmamızı bekler korumda artık 😊

 

Eveeeet dostlarım 😊. Bu yazımda Laravel üzerinde Migration ve Model Oluşturma konusunu elimden geldiğince dilim döndüğünce anlatmaya çalıştım. Umarım faydalı olmuşumdur. Eksik veya hatalı bir anlatım yapmış isem benimle iletişime geçmekten çekinmeyin. Konu başlarda biraz karmaşık veya zor gelebilir dostlarım anlıyorum. Öğrenme süreci içerisinde bu ve bunun gibi olayların olması doğaldır. Bu durumda sizlerden yapmanızı istediğim tek şey her yazımın sonunda dediğim gibi "İstikrarlı ve azlimli olmalısınız, Bolca pratik yapmalısınız 😊". Bu dediklerimi hayat felsefeniz yaparsanız başarı sizler için kaçınılmaz olacaktır 😊

Hayallerinizi gerçekleştirmeniz ve güzel yerlere gelmeniz dileklerimle... İyi çalışmalar dilerim 😊

Muhammed Fatih BAĞCIVAN
Yazar Hakkında

Kendi Halinde Bir Backend Developer

Önceki YazıJavascript SessionStorage Kullanımı
Sonraki YazıJQuery Chaining Method Kullanımı
Yorumlar (0)
Bu Yazıya Ait Hiçbir Yorum Bulunamadı (veya admin onaylamadı). İlk Yorum Yapan Sen Ol
Yorum Yapabilirsiniz