Laravel MySQL Bağlantısı
Hepinize merhaba dostlarım 😊. Bu yazımda sizlere Laravel framework'ü üzerinde veri tabanı bağlantısı gerçekleştirmeyi ve projemizi veri tabanına bağlama işleminden bahsedeceğim. Normalde laravelde yavaş yavaş proje geliştirmeye çalışırken veri tabanına ihtiyacımız elbette olacaktır. Hatta sadece laravel üzerinde değil diğer projelerde de aynı şekilde yani ufak ufak projeler geliştirmeye başladığımızda artık verilerle ilgili işlemler gerekecek ve veri tabanı bizim kapımızı çalacaktır. İşte bu yolda ben de laravel framework' ü üzerinde yazımın baş kısmında da dediğim gibi veri tabanı bağlantısını göstereceğim. Ama gelin öncelikle veri tabanı bağlantısı işlemini yapmadan öncelikle veri tabanı nedir gelin onun tanımını yapalım
VERİ TABANI NEDİR ?
Farkındaysanız blog yazılarımın hemen hemen hepsinde teorik bir tanım yok hepsi ufak ufak mantık şeklinde oluşuyor dostlarım. Bu tanımı da mantıksal şekilde açıklamak istiyorum. Veri tabanı bizim projemiz üzerindeki (projeye örnek vermek gerekirse dediğim e-ticaret, blog sitesi, haber sitesi vs) verilerimizi tek bir alanda tutmaya yarayan alanlarımızdır. Örneğin biz bir CRM yazılımı oluşturduk varsayalım. Bu CRM yazılımında (CRM: Customer Relationship Management yani Müşteri İlişkileri Yönetimi) birden fazla modül var ve anlaşıldığı üzere birden fazla verimiz var. Bu verileri veri tabanında tutarız. Buradan gözlemle yola çıkacak olursak projenin ilerlediği hemen hemen her zaman bir veri tabanına ihtiyaç vardır. Kısaca aklımızda şöyle yer edindirecek olursak projemiz ile veri tabanı çay+bisküvi ikilisidir diyebiliriz. Şimdi ise gelelim veri tabanı neden kullanılır onu inceleyelim
VERİ TABANI NEDEN KULLANILIR ?
Veri tabanının neden kullanıldığını aslında yukarıdaki yazıda bir nebze olsun anlamıştık dostlarım. Olsun bu yazıda tekrar incelememizin değinmemizin herhangi bir zararı olmayacaktır. Şimdi demiştik ya projemiz ilerleyince veri tabanına ihtiyaç tutarız verilerimizi tutarız diye. Şimdi şöyle bir mantık yapalım. Verilerimizi veri tabanında değil de ufak ufak değişkenlerde tutacağız varsayalım. Çok garip bir yol olduğunu siz de sezmişsinizdir. Hadi diyelim tuttuk 1 veri 2 veri 3 veri tutuyoruz. Bu veriler büyüdü ve 100 veriye yaklaşıyor. Bunları değişkenlerde tutmak o kadar saçma olur ki yani asla ama asla best practice bir yol olmaz. Her bir veri eklememiz gerektiğinde kodları açıp dizi içerisine eleman eklememiz (kodlar üzerinden) veya silme işleminde kodlarımız üzerinde silme gibi çok karmaşık mantıksız bir yöntem olur. Hadi diyelim böyle bir çılgınlık yaptık proje kodlarımızın içerisine yazıyoruz. Bir süre sonra projemizin boyutu aşırı derecede inanılmaz bir boyut alır ve projemiz zombi projeye dönüşür. İşte veri tabanını bu ve bunun gibi durumlarda kullanıp best practice bir yol izlemiş oluruz.
Eveeeet artık bu tanımları da yaptığımıza göre Laravel üzerinde database yani veri tabanı bağlantısına yavaştan geçelim :)
LARAVEL VERİ TABANI BAĞLANTISI
Geldik artık laravel üzerinde veri tabanı bağlantısı işlemine. Öncelikle MySQL üzerinden örnek bir veri tabanı açalım. Ben örnek olarak laravel-egitim şeklinde bir veri tabanı oluşturdum ve karakter setini de utf8_general_ci olarak ayarladım buraya kadar tamamız. Sonrasında laravel kök klasörü içerisindeki .env dosyamızı açalım. Dosyamızı açtığımızda içerisinde
APP_NAME=Laravel
APP_ENV=local
APP_KEY=base64:oYrxo2u2kajOt7I87BHPqJvVvneNASfJUmmXeSinjpM=
APP_DEBUG=true
APP_URL=http://localhost
LOG_CHANNEL=stack
DB_CONNECTION=mysql
DB_HOST=127.0.0.1
DB_PORT=3306
DB_DATABASE=laravel
DB_USERNAME=root
DB_PASSWORD=
BROADCAST_DRIVER=log
CACHE_DRIVER=file
QUEUE_CONNECTION=sync
SESSION_DRIVER=file
SESSION_LIFETIME=120
REDIS_HOST=127.0.0.1
REDIS_PASSWORD=null
REDIS_PORT=6379
MAIL_MAILER=smtp
MAIL_HOST=smtp.mailtrap.io
MAIL_PORT=2525
MAIL_USERNAME=null
MAIL_PASSWORD=null
MAIL_ENCRYPTION=null
MAIL_FROM_ADDRESS=null
MAIL_FROM_NAME="${APP_NAME}"
AWS_ACCESS_KEY_ID=
AWS_SECRET_ACCESS_KEY=
AWS_DEFAULT_REGION=us-east-1
AWS_BUCKET=
PUSHER_APP_ID=
PUSHER_APP_KEY=
PUSHER_APP_SECRET=
PUSHER_APP_CLUSTER=mt1
MIX_PUSHER_APP_KEY="${PUSHER_APP_KEY}"
MIX_PUSHER_APP_CLUSTER="${PUSHER_APP_CLUSTER}"
şeklinde bir sürü ayarlama kısmı var. Bizim şu anlık işimiz olan kısım
DB_CONNECTION=mysql
DB_HOST=127.0.0.1
DB_PORT=3306
DB_DATABASE=laravel
DB_USERNAME=root
DB_PASSWORD=
kısmıdır dostlarım. Bu kısım laravel kurulumunda default olarak geliyor. Biz bu kısmı oluşturduğumuz veri tabanı bilgisine göre ayarlayalım.
DB_CONNECTION=mysql
DB_HOST=127.0.0.1
DB_PORT=3306
DB_DATABASE=laravel_egitim
DB_USERNAME=root
DB_PASSWORD=
şeklinde düzenlememizi yaptık. Daha sonra
php artisan serve
komutumuzu verdiğimizde rahat bir şekilde bağlanacaktır.
Bunun haricinde de bağlantı şekli var mıdır diye soracak olursanız dostlarım diğer bir ayar dosyası var. İstersek oradan ayar yapıp da rahat bir şekilde bağlanabiliriz. Bunun için de laravel klasörümüz içerisinde config klasörü içerisinde database.php dosyasını açalım ve
<?php
use Illuminate\Support\Str;
return [
/*
|--------------------------------------------------------------------------
| Default Database Connection Name
|--------------------------------------------------------------------------
|
| Here you may specify which of the database connections below you wish
| to use as your default connection for all database work. Of course
| you may use many connections at once using the Database library.
|
*/
'default' => env('DB_CONNECTION', 'mysql'),
/*
|--------------------------------------------------------------------------
| Database Connections
|--------------------------------------------------------------------------
|
| Here are each of the database connections setup for your application.
| Of course, examples of configuring each database platform that is
| supported by Laravel is shown below to make development simple.
|
|
| All database work in Laravel is done through the PHP PDO facilities
| so make sure you have the driver for your particular database of
| choice installed on your machine before you begin development.
|
*/
'connections' => [
'sqlite' => [
'driver' => 'sqlite',
'url' => env('DATABASE_URL'),
'database' => env('DB_DATABASE', database_path('database.sqlite')),
'prefix' => '',
'foreign_key_constraints' => env('DB_FOREIGN_KEYS', true),
],
'mysql' => [
'driver' => 'mysql',
'url' => env('DATABASE_URL'),
'host' => env('DB_HOST', '127.0.0.1'),
'port' => env('DB_PORT', '3306'),
'database' => env('DB_DATABASE', 'forge'),
'username' => env('DB_USERNAME', 'forge'),
'password' => env('DB_PASSWORD', ''),
'unix_socket' => env('DB_SOCKET', ''),
'charset' => 'utf8mb4',
'collation' => 'utf8mb4_unicode_ci',
'prefix' => '',
'prefix_indexes' => true,
'strict' => true,
'engine' => null,
'options' => extension_loaded('pdo_mysql') ? array_filter([
PDO::MYSQL_ATTR_SSL_CA => env('MYSQL_ATTR_SSL_CA'),
]) : [],
],
'pgsql' => [
'driver' => 'pgsql',
'url' => env('DATABASE_URL'),
'host' => env('DB_HOST', '127.0.0.1'),
'port' => env('DB_PORT', '5432'),
'database' => env('DB_DATABASE', 'forge'),
'username' => env('DB_USERNAME', 'forge'),
'password' => env('DB_PASSWORD', ''),
'charset' => 'utf8',
'prefix' => '',
'prefix_indexes' => true,
'schema' => 'public',
'sslmode' => 'prefer',
],
'sqlsrv' => [
'driver' => 'sqlsrv',
'url' => env('DATABASE_URL'),
'host' => env('DB_HOST', 'localhost'),
'port' => env('DB_PORT', '1433'),
'database' => env('DB_DATABASE', 'forge'),
'username' => env('DB_USERNAME', 'forge'),
'password' => env('DB_PASSWORD', ''),
'charset' => 'utf8',
'prefix' => '',
'prefix_indexes' => true,
],
],
/*
|--------------------------------------------------------------------------
| Migration Repository Table
|--------------------------------------------------------------------------
|
| This table keeps track of all the migrations that have already run for
| your application. Using this information, we can determine which of
| the migrations on disk haven't actually been run in the database.
|
*/
'migrations' => 'migrations',
/*
|--------------------------------------------------------------------------
| Redis Databases
|--------------------------------------------------------------------------
|
| Redis is an open source, fast, and advanced key-value store that also
| provides a richer body of commands than a typical key-value system
| such as APC or Memcached. Laravel makes it easy to dig right in.
|
*/
'redis' => [
'client' => env('REDIS_CLIENT', 'phpredis'),
'options' => [
'cluster' => env('REDIS_CLUSTER', 'redis'),
'prefix' => env('REDIS_PREFIX', Str::slug(env('APP_NAME', 'laravel'), '_').'_database_'),
],
'default' => [
'url' => env('REDIS_URL'),
'host' => env('REDIS_HOST', '127.0.0.1'),
'password' => env('REDIS_PASSWORD', null),
'port' => env('REDIS_PORT', '6379'),
'database' => env('REDIS_DB', '0'),
],
'cache' => [
'url' => env('REDIS_URL'),
'host' => env('REDIS_HOST', '127.0.0.1'),
'password' => env('REDIS_PASSWORD', null),
'port' => env('REDIS_PORT', '6379'),
'database' => env('REDIS_CACHE_DB', '1'),
],
],
];
dosyamızı açalım. Burada fark edildiği üzere birden fazla veri tabanı için ayar var. Kodlara bakacak olursanız örnek veriyorum
env('DB_HOST','127.0.0.1')
şeklinde kod var. Burada biz aslında diyoruz ki .env klasörümüz içerisinde ayar varsa onu al, eğer o alan boş ise default olarak 127.0.0.1 değerini yani makina adresimizi oraya aktar diyoruz. Bunun gibi birçok veri tabanı ayarlarının da database.php üzerinden ayarlandığını görüyoruz. Normalde laravel ile proje geliştirirken sıklıkla MySQL üzerinde bağlantı yapıldığı için bu dosyamız içerisinden pek bir ayar yapmamıza gerek yoktur :).
Biz .env dosyamız üzerinde ayarımızı yaptıktan sonra
php artisan serve
komutumuzu yazdık ve veri tabanımıza rahatlıkla bağlantı yapmış olduk. Bütün işlemlerimiz işte bu kadar basit.
Eveeeet dostlarım 😊. Bu yazımda sizlere Veri tabanı nedir ve neden kullanılır, Laravel framework'ü veri tabanı üzerinde nasıl bağlanılır bunlara elimden geldiğince dilim döndüğünce anlatmaya çalıştım. Umarım faydalı olmuşumdur. Eksik veya hatalı bir şekilde anlatım yapmış isem benimle iletişime geçmekten çekinmeyin :). Konu başlarda biraz karmaşık veya zor gelebilir dostlarım anlıyorum. Bu aşamada sizlerden tek isteğim her yazımın altında da dediğim gibi "İstikrarlı ve Azimli Olmalısınız, Bolca Pratik Yapmalısınız". Bu dediklerimi hayat felsefeniz yaptığınız sürece başarı sizler için kaçınılmaz olacaktır.
Hayallerinizi gerçekleştirmeniz ve güzel yerlere gelmeniz dileklerimle... İyi çalışmalar dilerim :)
Yazar Hakkında
Kendi Halinde Bir Backend Developer