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!