Symfony 4 : Doctrine ORM ile veritabanı işlemleri

Taner Deliloğlu
Sep 7, 2018 · 2 min read

Veri tabanı oluşturma ve ayarlar

Symfony Recipes Server (symfony.sh) üzerinden, terminal aracılığıyla veritabanı işlemleri için gerekli olan paketleri projenize ekleyin.

composer require symfony/orm-pack
composer require symfony/maker-bundle — dev

.env dosyasından veritabanı ayarlarını yapın.

# .env
# customize this line!
DATABASE_URL=”mysql://db_user:db_password@127.0.0.1:3306/db_name
# to use sqlite:
# DATABASE_URL=”sqlite:///%kernel.project_dir%/var/app.db”

db_name kısmında ismini belirttiğiniz mysql veritabanınızı oluşturun.

php bin/console doctrine:database:create

Tablolarınızı (Entity) oluşturun

php bin/console make:entity

Tablonuzu ve alanlarınızı oluşturduktan sonra şemayı güncellemeniz
gerekmektedir. Bu işlemi önceki symfony projelerinde olduğu gibi doğrudan yapmayacağız. Öncelikle migration oluşturarak tablo üzerindeki değişiklikleri versiyonlayacağız. Bu şekilde tablo değişikliklerini yedeklemiş olup, gerek duyduğumuz zaman eski haline kolayca dönebiliriz.

php bin/console make:migration

şimdi src/Migrations dizininde oluşan versiyonlara dikkat edin.
her şey tamamsa şemayı güncelleyin.

php bin/console doctrine:migrations:migrate

doğrulama işlemi için:

php bin/console doctrine:schema:validate

Veri ekleme, silme ve güncelleme işlemleri

Entity Manager ile yeni kayıt eklenmesi

/**
* @Route(“/body/parts/add/{data}”, name=”body_parts_add”)
* @param $data
* @return Response
*/
public function add($data)
{
$entityManager = $this->getDoctrine()->getManager();$bodyPart = new BodyParts();
$bodyPart->setName($data);
// kaydı hazır hale getir. SQL henüz çalıştırılmadı.
$entityManager->persist($bodyPart);
// hazırdaki SQL sorgusu çalıştırıldı.
$entityManager->flush();
return new Response(“Başarıyla Eklendi.”, Response::HTTP_OK);}

eklenen veriyi kontrol edebilirsiniz:

php bin/console doctrine:query:sql ‘SELECT * FROM body_parts’

Eklenen kayıtların gösterimi

Sadece belirtilen kaydı gösterin:

/**
* @Route(“/body/parts/show/{id}”, name=”body_parts_show”)
* @param $id
* @return Response
*/
public function show($id)
{
$bodyPart = $this->getDoctrine()->getRepository(‘App:BodyParts’)- >find($id);
return new Response($bodyPart->getName(), Response::HTTP_OK);
}

tüm kayıtları listeleyin:

/**
* @Route(“/body/parts”, name=”body_parts”)
*/
public function all()
{
$bodyParts = $this->getDoctrine()->getRepository(‘App:BodyParts’)->findAll();
$response = array();
foreach ($bodyParts as $b){
$response[] = $b->getName();
}
return new JsonResponse($response);
}

Kayıtların silinmesi:

/**
* @Route(“/body/parts/delete/{id}”, name=”body_parts_delete”)
* @param $id
* @return Response
*/
public function delete($id)
{
$bodyPart = $this->getDoctrine()->getRepository(‘App:BodyParts’)->find($id);
$entityManager = $this->getDoctrine()->getManager();
$entityManager->remove($bodyPart);
$entityManager->flush();
return new Response(“başarıyla silindi.”, Response::HTTP_OK);
}

CRUD işlemi

Yukarıda veritabanı işlemlerini manuel olarak gerçekleştirdik. Bu, işleyişi kavramak açısından çok önemliydi. Dilerseniz, oluşturduğunuz entity için tek komutla create, read, update, delete sayfalarını ve backend kontrollerini oluşturabilirsiniz.

bin/console make:crud BlogPost

created: src/Controller/BlogPostController.php
created: src/Form/BlogPostType.php
created: templates/blog_post/_delete_form.html.twig
created: templates/blog_post/_form.html.twig
created: templates/blog_post/index.html.twig
created: templates/blog_post/show.html.twig
created: templates/blog_post/new.html.twig
created: templates/blog_post/edit.html.twig

Tebrikler!

Taner Deliloğlu

Written by

I am a web developer and father currently living in Denizli, Turkey.

Welcome to a place where words matter. On Medium, smart voices and original ideas take center stage - with no ads in sight. Watch
Follow all the topics you care about, and we’ll deliver the best stories for you to your homepage and inbox. Explore
Get unlimited access to the best stories on Medium — and support writers while you’re at it. Just $5/month. Upgrade