Laravel Has ile farklı database bağlanma
11 Ekim 2020

Laravel Has ile farklı database bağlanma

ile kurtitasarim

Merhabalar bugün Laravel Has ile farklı database bağlanma nasıl yapılıyor aktarmaya çalışacağım sizlere. PHP ile çözelebileceğiniz alternatif yollar var ama burada bir kütüphane kullandığımız için izleyeceğimiz yöntem bu şekilde olacaktır.

Başlamadan Önce

Neden bu işlemi yapıyoruz kısaca anlatmak isterim, kimi durumlarda loglarımızı veya farklı büyük tablolarımızı mevcut veritabanın yerine farklı bir veritabanı üzerinde tutmak isteyebilirz ama aynı zaman bunların arasında ilişkili olmasınıda isteyebiliriz.

Bir örnek olması adına;

  • Users
  • Log

Log tablosu veritabani_a
Users tablosu veritabani_b

Users tablosu model yapısı olarak

$connection = 'mysql'

Log tablosu model yapısı

$connection = 'mysql2'

bu yapıda herşey normal durumdadır. Olay aslında has olarak bağladığımızda başlamaktadır.

$logDailies = Log::where('created_at', '>', $this->PreviousMonthStart)
            ->where('updated_at', '<', $this->PreviousMonthEnd)
            ->whereNotNull('class_id')
            ->selectRaw('id, user_id, SUM(TIMESTAMPDIFF(SECOND, created_at, updated_at)) as times')
            ->with([
                'user' => function($query){
                    $query->select('id','name','type_id');
                }
            ])->has('user')
            ->groupBy('user_id')
            ->orderBy('times', 'desc')->get();

Benim buradaki kurgum Log modelinden has methodu ile User modeline bağlanmak ve çıktı almak.

Bu şekilde çalıştırmak istediğiniz zaman hata alırsınız çünkü Log veritabanın da users tablosunu aramaya çalışacaktır.

Laravel Has ile farklı database bağlanma Çözümü

Burada izleyeceğimiz yol şu şekilde olacaktır, has ile bağlandığım ilgili model’a küçük bir kod eklemesi yapacağım ve sorunum çözülmüş olacaktır.

public function __construct(array $attributes = [])
    {
        $this->table = env('DB_DATABASE').'.'.$this->table;
        parent::__construct();
    }

Yukarıdaki işlemden sonra genel olarak sisteminizin kontrolü sağlamanız önemlidir.

Laravel Nedir?

Laravel, MVC yapısında web uygulamaları geliştirme için tasarlanmış ücretsiz, açık kaynak PHP web uygulama iskeletidir. Laravel, GitHub sitesinde barındırılan kaynak kodu ile birlikte, MIT lisansı altında yayınlandı.

2014 ve 2015 yıllarında Sitepoint tarafından yapılan en popüler PHP uygulama iskeletleri anketlerinde Laravel iki sene üst üste en üst sırada yer aldı. Nisan 2015 tarihindeki verilere göre Laravel github’da barındırılan PHP projeleri arasında en çok takip edilen ve en popüler projedir.

Laravel, versiyon 4’ten itibaren bağımlılık yönetimi (dependency management) için composer paket yöneticisini tercih etmiştir. Yine versiyon 4’ten itibaren Doctrine, Monolog gibi paketlerin yanı sıra web iskeletini oluşturan komponentler için Symfony2 paketlerinden yararlanmaktadır.
Kaynak vikipedia.