Jump to content
Üyelik kaydınızı yaparak son yazılan içeriklerden haberdar olun! ×
  • entries
    24
  • comments
    0
  • views
    73,582

Laravel Eloquent Model ve Migration


Doğuhan ELMA

49 views

Laravel, veritabanınızla etkileşimi keyifli hale getiren bir nesne-ilişkisel eşleyici (ORM) olan Eloquent'i içerir. Eloquent kullanırken, her veritabanı tablosunun, o tablo ile etkileşim kurmak için kullanılan karşılık gelen bir "Modeli" vardır. Veritabanı tablosundan kayıt almanın yanı sıra, Eloquent modelleri tablodan kayıt eklemenize, güncellemenize ve silmenize de olanak tanır.

 

Artisan:

Model Sınıfı Oluşturma: 

php artisan make:model User

 

 

Model ismi verilerken nelere dikkat edilmeli:

Model ismi oluştururken dikkat edilmesi gereken birkaç önemli nokta vardır. Bu adımlar, projenizin düzenli ve anlaşılır olmasını sağlayacak, ayrıca Laravel'in Eloquent ORM'ini etkili bir şekilde kullanmanıza yardımcı olacaktır.

1. Laravel Standartlarına Uygunluk

Laravel'in standartlarına uygun bir şekilde model ismi belirlemek önemlidir. Laravel, modellerin tekil halde ve baş harfi büyük, kelimelerin ise PascalCase (Her Kelimenin İlk Harfi Büyük) olmasını tavsiye eder. Örneğin:

User

BlogPost

ProductCategory

2. İsimlendirme Çakışmalarını Önleme

Laravel, otomatik olarak bir model oluşturduğunuzda, bu model ile ilişkilendirilen veritabanı tablosunu varsayılan olarak tahmin eder. Bu nedenle, oluşturduğunuz modelin isminin veritabanındaki tablo ile eşleşmesine dikkat etmelisiniz. Eğer modeliniz User ise, varsayılan olarak users tablosuyla eşleşecektir. Ancak, özelleştirilmiş bir tablo kullanacaksanız $table özelliğiyle bu ilişkiyi belirtmelisiniz.

<?php
 
namespace App\Models;
 
use Illuminate\Database\Eloquent\Model;
 
class Flight extends Model
{
    protected $table = 'my_flights';
}

3. Anlaşılır ve Tanımlayıcı İsimler

Model ismi, o modelin neyi temsil ettiğini anlatmalıdır. Projenizin konseptine göre uygun ve anlaşılır bir isim seçmek, kodunuzu okuyanlar için daha açıklayıcı olacaktır. Örneğin:

User - Kullanıcı verilerini temsil eder. Database Tablo ismi: 'users'

BlogPost - Blog yazılarını temsil eder. Database Tablo ismi: 'blog_posts'

ProductCategory - Ürün kategorilerini temsil eder. Database Tablo ismi: 'product_categories'

 

Model isimlerinin açıklayıcı ve anlaşılır olması, projenizin bakımını ve geliştirilmesini kolaylaştırır. Bu nedenle, model isimlerini belirlerken bu noktalara dikkat etmek önemlidir.

 

 

Migration:

Laravel Migration, Laravel'in veritabanıyla ilgili işlemleri kolaylaştıran ve veritabanı şemalarını yönetmeye olanak tanıyan bir özelliktir. Migration'lar, veritabanı tablolarını ve bu tabloların yapısını tanımlamak için kullanılır. Bu yapı, veritabanı şemasının kodlanabilir ve proje içinde paylaşılabilir olmasını sağlar.

Migration'lar, proje ekibi arasında veritabanı şemasının yönetimini kolaylaştırır. Bir geliştirici, migration dosyalarını diğer geliştiricilerle paylaşarak herkesin aynı veritabanı şemasına sahip olmasını sağlayabilir. Ayrıca, projeyi bir sunucudan başka bir sunucuya taşırken veya test ortamından canlı ortama geçiş yaparken de migration'lar çok yararlı olabilir.

 

Migration Oluşturma:

Migration oluşturmak için Laravel'in sağladığı komut satırı aracını kullanırız. Örneğin, bir users tablosu oluşturmak için:

php artisan make:migration create_users_table

Bu komut, database/migrations dizininde timestamp_create_users_table.php adında bir migration dosyası oluşturur.

 

Not: Model ile migration aynı anda oluşturmak için artisan komutu:

php artisan make:model User -m

 

Migration Dosyası

Oluşturulan migration dosyasında up ve down metodları bulunur. up metodu veritabanı tablosunu oluştururken, down metodu bu işlemi geri almak için kullanılır. Örneğin:

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

class CreateUsersTable extends Migration
{
    public function up()
    {
        Schema::create('users', function (Blueprint $table) {
            $table->id();
            $table->string('name');
            $table->string('email')->unique();
            $table->timestamp('email_verified_at')->nullable();
            $table->string('password');
            $table->rememberToken();
            $table->timestamps();
        });
    }

    public function down()
    {
        Schema::dropIfExists('users');
    }
}

 

Migration Çalıştırma

Migration'ları çalıştırmak için aşağıdaki komutu kullanırız:

php artisan migrate

Bu komut, up metodunda tanımlanan tabloyu veritabanına oluşturacaktır. Ayrıca, migrations tablosuna bu migration'ın kaydedildiği bir kayıt ekler. Bu sayede, sonraki migration'ları çalıştırdığınızda Laravel daha önce çalıştırılmış migration'ları tekrar çalıştırmaz.

 

Migration Geri Alma

Bir migration'ı geri almak istediğinizde ise aşağıdaki komutu kullanabilirsiniz:

php artisan migrate:rollback

 

Bu komut, down metodunu çalıştırarak en son çalıştırılan migration'ı geri alır. Eğer birden fazla adım geri almak isterseniz, --step seçeneği ile adet belirtebilirsiniz:

php artisan migrate:rollback --step=3

 

Migration Yeniden Çalıştırma

Eğer bir migration'ı geri aldıktan sonra tekrar çalıştırmak isterseniz, refresh komutunu kullanabilirsiniz:

php artisan migrate:refresh

Bu komut, rollback işlemini yapar ve daha sonra migrate işlemiyle tüm migration'ları yeniden çalıştırır.

 

Bir tabloya yeni bir alan eklemek itediğimiz zaman sürekli rollback yaparak ekleyebileceğimiz gibi tablo verilerinde silmiş olacağız. Bunun canlı ortamda olumsuzluklar oluşturması nedeniyle yeni bir alan eklerken yeni bir migration oluşturmak ve tablo şemasını değiştirmemiz en ideal yoldur.

 

Tablo Şemasını Güncelleme: 

Bir tablonun şemasını güncellemek için Laravel Migration'ları kullanabilirsiniz. Mevcut bir tabloya yeni bir sütun eklemek veya var olan bir sütunu değiştirmek gibi değişiklikler yapabilirsiniz. İşte bu işlemi adım adım nasıl yapacağınız:

Adım 1: Yeni Migration Oluşturma

Öncelikle yeni bir migration dosyası oluşturmanız gerekiyor. Bu dosya, tablonuzdaki değişikliği tanımlayacak.

Örneğin, posts tablosuna description adında yeni bir sütun eklemek istediğinizi varsayalım:

 

php artisan make:migration add_description_to_posts_table

Bu komut, database/migrations dizininde timestamp_add_description_to_posts_table.php adında bir migration dosyası oluşturacaktır.

 

Adım 2: Migration Dosyasını Düzenleme

Oluşturduğunuz migration dosyasını açarak tabloyu güncelleyebilirsiniz.

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

class AddDescriptionToPostsTable extends Migration
{
    public function up()
    {
        Schema::table('posts', function (Blueprint $table) {
            $table->string('description')->after('content')->nullable();
        });
    }

    public function down()
    {
        Schema::table('posts', function (Blueprint $table) {
            $table->dropColumn('description');
        });
    }
}

ukarıdaki örnekte, add_description_to_posts_table migration'ı posts tablosuna description sütununu ekler. after('content') ile content sütunundan sonra eklenmesini sağlıyoruz ve nullable ile bu sütunun boş olabileceğini belirtiyoruz.

 

Not: Burada şuna dikkat etmek gerek eğer 'php artisan make:migration add_...' add ile başlarsanız oluşan migrate şemayi değiştirmeye yönelik bir kod üretecektir. create ile başlarsanız yeni bir tablo oluşturmaya yönelik kod oluşur.

0 Comments


Recommended Comments

There are no comments to display.

Guest
Add a comment...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

×
×
  • Create New...