İçeriğe geç →

Laravel Başlangıç Rehberi – 5

Selam,

Bugün Laravel’de temel veri tabanı işlemlerini öğreneceğim.

  • Veri tabanına bağlanma,
  • Temel SQL sorguları,
  • QueryBuilder

Pek tabii ki veri tabanıyla işlemler yapmamız için bir veri tabanına ihtiyacımız var. phpmyadmin üzerinden basit bir veri tabanı oluşturarak başlıyorum. Yeri gelmişken faydalı bir link paylaşmak istiyorum: mockaroo.com. Mockaroo sayesinde rastgele veriler oluşturup veri tabanınıza yükleyebilirsiniz.

test” isimli bir veri tabanı ve “users” tablosu oluşturdum. Tablomda id, isim ve meslek sütunları mevcut. Tabloyu indirmek isterseniz buraya link brakıyorum.

Veri Tabanına Bağlanma

app/config/database.php dosyasını açıp connections dizisindeki mysql'e gerekli parametreleri girmemiz girek. Eğer farklı tipte bir veri tabanıyla çalışacaksak, veri tabanı tipimize uygun olan dizinin elemanlarını değiştirmemiz gerek.

Veri tabanına bağlantımızın başarılı olup olmadığını görmek için ufak bir kod yazalım:

routes.php:

Route::get('/', function()
{
	$veriTabaniAdi = DB::Connection()->getDatabaseName();
	return $veriTabaniAdi. " ile bağlantı sağlandı.";
});

Eğer her şey doğru çalışırsa lcoalhost adresinde bizi “test ile bağlantı sağlandı” mesajı karşılaması gerek.

Temel SQL Sorguları

Select

Şimdi oluşturduğumuz veri tabanı üzerinde biraz sorgu yapalım. Sorgularımızı yaparken DB classının metodlarını kullanacağız.

İlk olarak users tablomuzdaki tüm verileri çekelim:

Route::get('/', function()
{
	$users = DB::select("SELECT * FROM users");
	var_dump($users);
});

select() tablomuzdaki verileri objeler halinde bir diziye atıyor.

users tablosundan sadece idsi 1 olan satırı çekelim:

Route::get('/', function()
{
	$user = DB::select("SELECT * FROM users WHERE id = 1");
	var_dump($user);
});

Bu arada var_dump yerine Laravel’in dd() metodunu da kullanabiliriz.

select() metodu değerleri array olarak döndürüyor. Yukarıda tek bir veri çektiğimiz için array bizim için ideal sayılmaz. Verimizi sadece object olarak almak daha mantıklı. Bunun için selectOne() metodunu kullanabiliriz.

	$user = DB::selectOne("SELECT * FROM users WHERE id = 1");
	dd($user);

Böylece diziden kurtulup sadece object olarak verimizi aldık.

Eğer gelen veriyi niteliklerine göre yani sütunlara göre yazdırmak istersek;

$user = DB::selectOne("SELECT * FROM users WHERE id = 2");
return $user->isim." adlı kişinin mesleği ".$user->meslek;

Insert

Şimdi tablomuza yeni bir veri eklemeyi görelim. Tahmin edebileceğiniz gibi bu sefer insert() metodunu kullanacağız.

DB::insert("INSERT INTO users (isim, meslek) VALUES (?, ?)", array("Wladyslaw Szpilman", "Pianist"));

? kullanmamızın sebebi SQL Injectiona karşı güvenlik önlemi almak.

Update

DB::update("UPDATE users SET meslek = ? WHERE isim = ?", array("Doctor", "Lisa"));

“Lisa” isimli kişinin mesleğini “Doctor” olarak güncelledik.

Delete

DB::delete("DELETE FROM users WHERE id = ?", array("12"));

Diğer Sorgular

Yukarıda CRUD işlemlerini gördük. Bunlarında dışında veri tabanı üzerinde sorgular çalıştırmamız gerekirse statement() metodunu kullanmamız gerek. Mesela users tablomuza yeni bir sütun eklemek gibi.

DB::statement("ALTER TABLE users ADD eposta VARCHAR(40)");

CRUD  sorgularını da statement() içinde kullanabiliriz ama optimizasyon açısından ideal olanın select sorguları için select(), delete için delete() metodunu kullanmak olduğunu söylüyorlar.

Query Builder

Laravel sorgu oluşturucusu, uygulamanızı SQL enjeksiyon saldırılarına karşı korumak için PDO parametre bağlayıcı kullanmaktadır. Bağlayıcı olarak geçirilen yazıların temizlenmesine gerek yoktur. Temizlenmeyen yalnızca iki metod vardır, bunlar groupBy ve orderBy‘dır. Kullanıcı girdilerini bu metodlara doğrudan geçmemelisiniz. – laravel.gen.tr

QueryBuilder kullanmak için diğer önemli bir sebep ise, farklı veri tabanı tipleri için farklı sorgu cümleleri oluşturmamıza gerek kalmaması. Örneğin pgsql için geçerli olan bazı sorgu cümlecikleri mysql için farklı şekilde yazılması gerekebilir. QueryBuilder ile bu farklıları düşünmemize gerek kalmadan sorgularımızı yazıp, gerisini QueryBuilder‘a bırakabiliriz.

select sorguları

İlk olarak users tablomuzdaki tüm verileri çekmekle başlayalım. Yani SELECT * FROM users komutunu QueryBuilder ile yazacağız.

$users = DB::table("users")->get();
dd($users);

QueryBuilder ile sorgu oluştururken table() ile başlamalıyız. Parametre olarak sorguyu yapacağımız tablonun adını veriyoruz ve get() metodu ile tüm verileri çekiyoruz. Tabii ki sonuçlar yine bir dizi içinde bize döndürülüyor.

Belirli bir veriyi çekmek istersek; (SELECT * FROM users WHERE id =2)

$users = DB::table("users")->where("id", 2)->get();

Tek bir veri çektiğimiz zaman selectOne() metodunu kullanarak gelen objeleri diziye atmadan almıştık. QueryBuilder da ise first() metodunu kullanıyoruz.

$users = DB::table("users")->where("id", 2)->first();

QueryBuilder’ın en güzel yanlarından biri ise sihirli metodları where koşullarıyla beraber kullanabilmemiz. Şöyle ki:

$users = DB::table("users")->whereMeslek("teacher")->first();

Böylece meslekleri “teacher” olan verilerin sadece ilkini almış olduk.

where içinde bazı koşullar belirtmek istersek (<, > ..) şu şekilde kullanıyoruz. (SELECT * FROM users WHERE id > 10)

$users = DB::table("users")->where("id", ">", "10")->get();

insert sorguları

DB::table("users")->insert( array("isim" => "Jimmy", "meslek" => "Developer", "eposta" => "j@d.y") );

Her zamanki gibi table() metodu ile başlıyoruz. Daha sonra insert() metoduna parametre olarak bir dizi gönderiyoruz. Dizinin anahtarları sütun isimlerini, değerleri ise verilerimizi temsil ediyor.

Eğer eklediğimiz kullanıcının “id” değerini almak istersek insertGetId() metodunu kullanabiliriz.

$users = DB::table("users")->insertGetId( array("isim" => "Jimmy", "meslek" => "Developer", "eposta" => "j@d.y") );

update sorguları

update sorgusuna geçmeden önce ufak bir hatırlatma yapmakta fayda var. uptade() metodunu kullanmadan önce where() metodunu kullanmayı unutmamalıyız. Eğer where() metodu kullanılmazsa yapılan sorgu tablodaki verileri etkileyecektir. Aynı durum delete sorguları için de geçerli.

DB::table("users")->where( array("id", "2") )->update( array("eposta" => "yeni@e.posta") );

İstersek yine sihir yapabiliriz:

DB::table("users")->whereId(2)->update( array("eposta" => "yeni@e.posta") );

delete sorguları

DB::table("users")->whereEposta("yeni@e.posta")->delete();

Bugünlük öğreneceğim konularım bu kadardı. Veri tabanı işlemleri her proje için önemli ve olmazsa olmaz. Laravel ile oluşturduğumuz projelerde, veri tabanı işlemleri için elimizden geldiğince QueryBuilder kullanmaya özen göstermeliyiz. QueryBuilder’a ait diğer fonksiyonlar için laravel.gen.tr‘yi ya da laravel.com’u ziyaret edebilirsiniz.

Sırada Ne Var?

Takip ettiğim eğitim serisinde sırada bir proje var: Fon Toplama Sitesi. Uğraşmak isteyenler için projeyi kısaca açıklıyorum.

  • Projelerinizi saklamak için bir veri tabanına ihtiyacınız olacak. Veri tabanında projeler isminde bir tablo oluşturup, her projeye ait id, proje adı ve bağış miktarını tutacak alanları oluşturmanız yeterli.
  • Sitenin ana sayfasında bir form olacak ve kullanıcılar bu forma projelerinin adını girip gönderecek. Eğer girilen proje mevcutsa kullanıcıya uyarı mesajı vereceğiz. Proje mevcut değilse veri tabanına ekleyebiliriz.
  • Ana sayfada hali hazırda bulunan projeleri de listeleyeceğiz. Her projenin yanında ne kadar bağış topladığı yazacak. Ayrıca her projenin yanında bağış yapılabilmesi için bir alan olmalı. İsterseniz select box isterseniz input ile yapabilirsiniz; size kalmış.
  • Son olarak kullanıcılar projeye bağış yaptığı zaman, projenin bağış miktarını güncelleyip yeniden listelemeliyiz.

Bu projeyi bloğumda paylaşmayacağım. Çünkü bireysel olarak üzerinde uğraşılması gereken bir proje. Böylece bu kısma kadar öğrendiklerimizi daha iyi anlayabiliriz ve pratiğe dökebiliriz. Ve kesinlikle bunu yapmanızı öneririm. Önce projeyi kendiniz yapmaya çalışın ve daha sonra eğitimin ana sayfasından eğitmenin nasıl yaptığını inceleyin. Bu çok yararlı olacaktır ve şu ana kadar öğrendiklerimizle alakalı ekstra ipuçları da göreceksiniz.

Projeyi yaptıktan sonra eğitime şu konularla devam ediyorum:

  • MVC
  • REST

Açıkcası bunlar en çok öğrenmeyi istediğim konulardan.

Eğitimler çok temel seviyede ilerliyor ama ben çok memnunum. Eğer beni takip edenler varsa, umarım sizler de bu eğitim setinden bir şeyler öğrenmişinizdir. Büyük ihtimalle de öğrendiğinizi sanıyorum 🙂 Hatta bazıları bu bloğu bırakıp direkt videolardan eğitimi bitirmiş bile olabilir ki bence olması gereken de bu 🙂

Hatırlatma1: Laravel öğrenmek için bu linkteki eğitimi takip ediyorum ve öğrendiklerimi burada paylaşıyorum.Buraya tıklayarak eğitimin anasayfasına ulaşabilir ve kaynak kodlarını indirebilirsiniz.

Hatırlatma2: Lütfen eksik,hatalı ya da düzeltilmesi gereken bir şey farkederseniz bana bildirin.

Kategori: Laravel

Yorumlar

Siz de düşüncelerinizi paylaşın

Bu site, istenmeyenleri azaltmak için Akismet kullanıyor. Yorum verilerinizin nasıl işlendiği hakkında daha fazla bilgi edinin.