Başlık doğru mu oldu bilmiyorum fakat işin özü şu: Şahsen ben veritabanı tablolarımı Entity kullanarak hazırlamaya üşendim. Onun yerine phpMyAdmin kullanarak veritabanımı oluşturdum. Yani elimde yeni bir veritabanı var. Fakat bu sizin halihazırda kullandığınız veritabanı da olabilir. Problem değil. İkisi de aynı mantık.
Şimdi elimizdeki veritabanını inceleyerek Symfony bizim için Entity’leri otomatik olarak oluşturacak. Bunun için aşağıdaki adımları takip edin:
Adım 1 – parameters.yml Dosyanızı Güncelleyin
app/config/parameters.yml dosyanızda veritabanı bilgilerinizi güncelleyin.
Adım 2 – Terminali açın
Terminali açın ve proje klasörünüzün içine gelin. Daha sonra aşağıdaki komutu çalıştırın:
1 |
php bin/console doctrine:mapping:import --force AppBundle yml |
Bu işlem src/AppBundle/Resources/config/ dizini içerisine .yml uzantılı olarak veritabanınızı dönüştürmüş olacak. Mevcut tablolarınızın hepsini burada görebilirsiniz.
Adım 3 – YML dosyalarını Annotation olarak güncelleyelim
Bu işlem ile src/AppBundle/Entity/ klasörü içerisinde bütün varlıklarınız oluşturulacak
1 |
php bin/console doctrine:mapping:convert annotation ./src |
Eveett, varlıklarımız oluşturuldu.
Adım 4 – Oluşturduğumuz YML dosyalarını silelim
src/AppBundle/Resources/config/ klasörü içerisinde az önce oluşturduğumuz .yml uzantılı dosyaları kaldıralım. Bu dosyalar çakışmaya sebep oluyor.
İşlem bu kadar basit arkadaşlar. Temsili bir varlık dosyası paylaşmak istiyorum:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 |
<?php // src/AppBundle/Entity/BlogComment.php namespace AppBundleEntity; use DoctrineORMMapping as ORM; /** * @ORMTable(name="blog_comment") * @ORMEntity */ class BlogComment { /** * @var integer $id * * @ORMColumn(name="id", type="bigint") * @ORMId * @ORMGeneratedValue(strategy="IDENTITY") */ private $id; /** * @var string $author * * @ORMColumn(name="author", type="string", length=100, nullable=false) */ private $author; /** * @var text $content * * @ORMColumn(name="content", type="text", nullable=false) */ private $content; /** * @var datetime $createdAt * * @ORMColumn(name="created_at", type="datetime", nullable=false) */ private $createdAt; /** * @var BlogPost * * @ORMManyToOne(targetEntity="BlogPost") * @ORMJoinColumn(name="post_id", referencedColumnName="id") */ private $post; } |
Sonuç
Yani her tablo için Annotation’ı anlayıp yazarak uğraşmamıza gerek yok :) Symfony bizim için herşeyi halletmiş. Aslında Doctrine halletmiş desek daha doğru olur.
Kaynak: https://symfony.com/doc/current/doctrine/reverse_engineering.html
Yorumlar