Symfony 4 : Doctrine ORM ile veritabanı işlemleri

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!