Skip to content

Mevcut Veritabanınızı Symfony Doctrine Varlığına Çevirme

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:

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

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:

<?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

TR Kodlama GitHub'da!

TR Kodlama'da yer alan makaleleri GitHub üzerinden düzenleyebileceğinizi biliyor muyudunuz? Harika değil mi? Bu makale ile ilgili düzenleme yapmak isterseniz aşağıdaki butona tıklayınız!

GitHub'da Görüntüle ve Düzenle!