Merhabayın arkadaşlar :D
Bugün sizlere Symfony framework'ünün güçlü bir ORM (Object-Relational Mapping) kütüphanesi olan Doctrine ile nasıl çalışılacağını anlatacağım. Doctrine, veritabanı işlemlerini nesne odaklı bir şekilde gerçekleştirmeyi sağlayan bir araçtır. Bu, veritabanı tablolarını PHP nesneleri olarak düşünebileceğiniz anlamına gelir, böylece veritabanı işlemleri daha kolay hale gelir.
İlk olarak, Symfony projenize Doctrine'ü eklemelisiniz. Composer aracılığıyla bu işlemi gerçekleştirebilirsiniz:
composer require symfony/orm-pack
Bu, Symfony için gerekli olan tüm Doctrine bileşenlerini yükler. Ardından, Doctrine konfigürasyonunu yapılandırmak için config/packages/doctrine.yaml
dosyasını kullanabilirsiniz. Bu dosya, veritabanı bağlantı ayarlarını, entity konfigürasyonlarını ve diğer ORM ayarlarını içerir.
Örneğin, MySQL veritabanına bağlanmak için bir yapılandırma şu şekilde olabilir:
doctrine:
dbal:
driver: 'pdo_mysql'
server_version: '5.7'
charset: utf8mb4
url: '%env(resolve:DATABASE_URL)%'
orm:
auto_generate_proxy_classes: true
naming_strategy: doctrine.orm.naming_strategy.underscore
auto_mapping: true
Burada DATABASE_URL
çevresel değişkeni Symfony'nin ortam dosyasında tanımlanmış olmalıdır.
Entity sınıflarını oluşturmak için, veritabanındaki her bir tablo için bir sınıf oluşturmanız gerekecek. Örneğin, bir User
entity sınıfı oluşturalım.
// src/Entity/User.php
namespace App\Entity;
use Doctrine\ORM\Mapping as ORM;
/**
* @ORM\Entity()
* @ORM\Table(name="users")
*/
class User
{
/**
* @ORM\Id()
* @ORM\GeneratedValue()
* @ORM\Column(type="integer")
*/
private $id;
/**
* @ORM\Column(type="string", length=255)
*/
private $name;
/**
* @ORM\Column(type="string", length=255)
*/
private $email;
// Getters and setters...
}
}
Bu sınıf, users
adında bir tabloya karşılık gelir. id
, name
ve email
gibi sütunlar için alanları ve bunların tipini tanımlar.
Veritabanı işlemleri için Doctrine kullanmak oldukça basittir. Örneğin, bir kullanıcı oluşturmak için
$user = new User();
$user->setName('John Doe');
$user->setEmail('john@example.com');
$entityManager->persist($user);
$entityManager->flush();
Bu kod, User
sınıfından bir nesne oluşturur, veritabanına ekler ve değişiklikleri kaydeder.
Doctrine ile sorgular yapmak için Doctrine Query Language (DQL) veya Doctrine Criteria kullanabilirsiniz. Örneğin:
$query = $entityManager->createQuery(
'SELECT u
FROM App\Entity\User u
WHERE u.email = :email'
)->setParameter('email', 'zafer@kodlamaklazim.com');
$users = $query->getResult();
Bu, users tablosunda email alanı zafer@kodlamaklazim.com olan kullanıcıları seçer.
Son olarak, Doctrine, veritabanı şemalarını güncellemek için de bir araç sağlar:
php bin/console doctrine:schema:update --force
Bu komut, entity sınıflarınızdaki değişiklikleri algılar ve veritabanını buna göre günceller.
Doctrine kullanarak Symfony ile güçlü ve esnek veritabanı işlemleri gerçekleştirebilirsiniz. Bu sayede veritabanı işlemlerini nesne odaklı bir şekilde gerçekleştirebilir ve kodunuzu daha temiz ve bakımı kolay hale getirebilirsiniz.