09.Doctrine Fixtures Bundle — Nelmio/Alice

09.Doctrine Fixtures Bundle — Nelmio/Alice

Merhaba bu yazımda Dummy Data oluşturacağız, böylece Repository konusuna inceden bir giriş yapacağız. Repository konusuna inceden giriş yapacağız diyorum çünkü, bu yazı Dummy Data ile ilgili, Repository konusunun ön hazırlığı niteliğinde. Malum veritabanımız boş iken sorgularımızın bir anlamı yok, çünkü ne yazarsak yazalım dönen sonuç hep null/boş olacak. Symfony de Dummy Data oluşturmadan önce projemize dahil etmemiz gereken bir kaç eklenti var. Bu eklentileri projemize dahil ettikten sonra Entity dosyamızı biraz değiştireceğiz, Böylece size Repository ve Doctrine sorgularını daha rahat örneklerle anlatabileceğim.

 

Yukarıda bahsettiğim bu iki adet component(eklenti), bizim yerimize veritabanımızda dummy data oluşturacak. Daha sonra bizde sorgularımızı hazırlayabileceğiz. Burada ki ve bu yazımda ki amaç: veritabanımızda hızlıca(onlarca, yüzlerce yada binlerce) dummy data oluşturmak. Öncelikle sizlere kuracağımız eklentiler hakkında kısaca bilgi vermek istiyorum.

 

DoctrineFixturesBundle – Doctrine Fixtures Bundle

Fikstürler, kontrol edilen verileri bir veritabanına yüklemek için kullanılır. Bu veriler test için kullanılabilir veya uygulamanın sorunsuz çalışması için gereken başlangıç ​​verileri olabilir. Symfony’de aslında fikstürleri yönetmenin hiçbir yolu yoktur. Ancak Doctrine2’nin Doctrine ORM veya ODM için fikstür yazmanıza yardımcı olacak bir kütüphanesi vardır. Bu kütüphanenin adıda DoctrineFixturesBundle dır. Dilerseniz Symfony Doctrine Fixtures Bundle ‘nın resmi sitesime bakabilir, detaylı bilgi edinebilirsiniz. Kuracağımız component/eklenti lerden birisi bu: Doctrine Fixtures Bundle

 

Nelmio/Alice: Expressive Fixtures Generator

Fzaninotto/Faker’ın desteği ile Alice, projenizi geliştirirken veya test ederken kullanılacak bir ton fikstür/dummy data/sahte veri oluşturmanıza izin verir. Nelmio/Alice seçenekler ve parametrelerle birlikte karmaşık veriler üretmeyi çok kolay hale getirir. Nelmio/Alice okunaklı ve kolay şekilde düzenlemeyi hedefleyen birkaç temel araç sunar; böylece bizler gerekirse(ki gerekiyor) hızlıca dummy data oluşturabiliriz. Nelmio/Alice ve Fzaninotto/Faker uygulamalarının resmi sitelerine bakabilir, daha detaylı bilgi edinebilirsiniz. (Şimdi bakmasanız bile, ileride bakacağınızdan eminim 🙂 )

 

DoctrineFixturesBundle ve Nelmio/Alice Kurulumu

Aslında kurulumu basit, aşağıda ki komutu çalıştırın;

composer require --dev doctrine/doctrine-fixtures-bundle nelmio/alice

Yukarıda ki iki eklenti de “require –dev” dediğimiz için sadece dev(Development/Geliştirme) için kuruldu. composer.json dosyasına bakarsanız, diğer eklentilerden farklı olarak bu iki eklenti dev sekmesine yazıldı.

"require-dev": {
        "doctrine/doctrine-fixtures-bundle": "^2.3",
        "nelmio/alice": "^2.3",
        "sensio/generator-bundle": "^3.0",
        "symfony/phpunit-bridge": "^3.0"
    },

Olması gerektiği gibi, bu iki eklenti bize Geliştirme aşamasında lazım. Hatırlayın Symfony de Dev, Prod ve Test olmak üzere üç durum vardır. Eklentilerimizi kurduğumuza göre şimdi ayarlaya biliriz. AppKernel.php dosyanızı açın ve aşağıda ki satırları bulun.

<?php
// E:\BenVeAlem\SymfonyTutorial\app\AppKernel.php

use Symfony\Component\HttpKernel\Kernel;

use Symfony\Component\Config\Loader\LoaderInterface;


class AppKernel extends Kernel
{
    public function registerBundles()
    {
        $bundles = [
            new Symfony\Bundle\FrameworkBundle\FrameworkBundle(),
            new Symfony\Bundle\SecurityBundle\SecurityBundle(),
            new Symfony\Bundle\TwigBundle\TwigBundle(),
            new Symfony\Bundle\MonologBundle\MonologBundle(),
            new Symfony\Bundle\SwiftmailerBundle\SwiftmailerBundle(),
            new Doctrine\Bundle\DoctrineBundle\DoctrineBundle(),
            new Sensio\Bundle\FrameworkExtraBundle\SensioFrameworkExtraBundle(),
            new Symfony\Bundle\AsseticBundle\AsseticBundle(),
            new AppBundle\AppBundle(),
        ];

        if (in_array($this->getEnvironment(), ['dev', 'test'], true)) {
            $bundles[] = new Symfony\Bundle\DebugBundle\DebugBundle();
            $bundles[] = new Symfony\Bundle\WebProfilerBundle\WebProfilerBundle();
            $bundles[] = new Sensio\Bundle\DistributionBundle\SensioDistributionBundle();

            if ('dev' === $this->getEnvironment()) {
                $bundles[] = new Sensio\Bundle\GeneratorBundle\SensioGeneratorBundle();
                $bundles[] = new Symfony\Bundle\WebServerBundle\WebServerBundle();
            }
        }

        return $bundles;
    }

Buraya aşağıda ki satırı ekleyin

$bundles[] = new Doctrine\Bundle\FixturesBundle\DoctrineFixturesBundle();

Ekledikten sonra aşağıda ki gibi olmalıdır.


 

 

<?php
// E:\BenVeAlem\SymfonyTutorial\app\AppKernel.php
use Symfony\Component\HttpKernel\Kernel;
use Symfony\Component\Config\Loader\LoaderInterface;

class AppKernel extends Kernel
{
    public function registerBundles()
    {
        $bundles = [
            new Symfony\Bundle\FrameworkBundle\FrameworkBundle(),
            new Symfony\Bundle\SecurityBundle\SecurityBundle(),
            new Symfony\Bundle\TwigBundle\TwigBundle(),
            new Symfony\Bundle\MonologBundle\MonologBundle(),
            new Symfony\Bundle\SwiftmailerBundle\SwiftmailerBundle(),
            new Doctrine\Bundle\DoctrineBundle\DoctrineBundle(),
            new Sensio\Bundle\FrameworkExtraBundle\SensioFrameworkExtraBundle(),
            new Symfony\Bundle\AsseticBundle\AsseticBundle(),
            new AppBundle\AppBundle(),
        ];

        if (in_array($this->getEnvironment(), ['dev', 'test'], true)) {
            $bundles[] = new Symfony\Bundle\DebugBundle\DebugBundle();
            $bundles[] = new Symfony\Bundle\WebProfilerBundle\WebProfilerBundle();
            $bundles[] = new Sensio\Bundle\DistributionBundle\SensioDistributionBundle();
            $bundles[] = new Doctrine\Bundle\FixturesBundle\DoctrineFixturesBundle();

            if ('dev' === $this->getEnvironment()) {
                $bundles[] = new Sensio\Bundle\GeneratorBundle\SensioGeneratorBundle();
                $bundles[] = new Symfony\Bundle\WebServerBundle\WebServerBundle();
            }
        }

        return $bundles;
    }

Bu kısım bitti. Artık Fikstürü kullanabiliriz. Bir örnek yapacağız. Ama şimdilik burada bırakalım ve Entity dosyamızı güncelleyelim.

 

Book Entity Dosyamızı güncelleyelim.

Entity dosyamızda çok az bilgi var, bu nedenle hem gerçekçi değil, hem de custom sorgu yazmaya pek uygun değil. Book Entity dosyanızı açın, içerisinde ne varsa silin. Aşağıda verdiğim kodu kopyalayıp, yapıştırın.

<?php
// E:\BenVeAlem\SymfonyTutorial\src\AppBundle\Entity\Book.php
namespace AppBundle\Entity;

use Doctrine\ORM\Mapping as ORM;

/**
 * Book
 *
 * @ORM\Table(name="book")
 * @ORM\Entity(repositoryClass="AppBundle\Repository\BookRepository")
 */
class Book
{
    /**
     * @var int
     *
     * @ORM\Column(name="id", type="integer")
     * @ORM\Id
     * @ORM\GeneratedValue(strategy="AUTO")
     */
    private $id;

    /**
     * @var string
     *
     * @ORM\Column(name="name", type="string", length=255, unique=true)
     */
    private $name;

    /**
     * @var string
     *
     * @ORM\Column(name="excerpt", type="text")
     */
    private $excerpt;

    /**
     * @var string
     *
     * @ORM\Column(name="format", type="string", length=255, nullable=true)
     */
    private $format;

    /**
     * @var int
     *
     * @ORM\Column(name="page", type="integer")
     */
    private $page;

    /**
     * @var string
     *
     * @ORM\Column(name="dimension", type="string", length=255, nullable=true)
     */
    private $dimension;

    /**
     * @var string
     *
     * @ORM\Column(name="publisher", type="string", length=255)
     */
    private $publisher;

    /**
     * @var string
     *
     * @ORM\Column(name="imprint", type="string", length=255, nullable=true)
     */
    private $imprint;

    /**
     * @var string
     *
     * @ORM\Column(name="language", type="string", length=20)
     */
    private $language;

    /**
     * @var string
     *
     * @ORM\Column(name="isbn_number", type="string", length=20, unique=true)
     */
    private $isbnNumber;

    /**
     * @var string
     *
     * @ORM\Column(name="illustrations", type="string", length=255, nullable=true)
     */
    private $illustrations;

    /**
     * @var string
     *
     * @ORM\Column(name="price", type="decimal", precision=10, scale=0)
     */
    private $price;

    /**
     * @var string
     *
     * @ORM\Column(name="image", type="string", length=255, nullable=true)
     */
    private $image;

    /**
     * @var \DateTime
     *
     * @ORM\Column(name="created_at", type="datetime")
     */
    private $createdAt;

    /**
     * @var \DateTime
     *
     * @ORM\Column(name="updated_at", type="datetime")
     */
    private $updatedAt;

    /**
     * @var \DateTime
     *
     * @ORM\Column(name="published_at", type="datetime")
     */
    private $publishedAt;

    /**
     * @var bool
     *
     * @ORM\Column(name="is_publish", type="boolean")
     */
    private $isPublish;

    /**
     * @var string
     *
     * @ORM\Column(name="author", type="string", length=255)
     */
    private $author;


    /**
     * Get id
     *
     * @return int
     */
    public function getId()
    {
        return $this->id;
    }

    /**
     * Set name
     *
     * @param string $name
     *
     * @return Book
     */
    public function setName($name)
    {
        $this->name = $name;

        return $this;
    }

    /**
     * Get name
     *
     * @return string
     */
    public function getName()
    {
        return $this->name;
    }

    /**
     * Set excerpt
     *
     * @param string $excerpt
     *
     * @return Book
     */
    public function setExcerpt($excerpt)
    {
        $this->excerpt = $excerpt;

        return $this;
    }

    /**
     * Get excerpt
     *
     * @return string
     */
    public function getExcerpt()
    {
        return $this->excerpt;
    }

    /**
     * Set format
     *
     * @param string $format
     *
     * @return Book
     */
    public function setFormat($format)
    {
        $this->format = $format;

        return $this;
    }

    /**
     * Get format
     *
     * @return string
     */
    public function getFormat()
    {
        return $this->format;
    }

    /**
     * Set page
     *
     * @param integer $page
     *
     * @return Book
     */
    public function setPage($page)
    {
        $this->page = $page;

        return $this;
    }

    /**
     * Get page
     *
     * @return int
     */
    public function getPage()
    {
        return $this->page;
    }

    /**
     * Set dimension
     *
     * @param string $dimension
     *
     * @return Book
     */
    public function setDimension($dimension)
    {
        $this->dimension = $dimension;

        return $this;
    }

    /**
     * Get dimension
     *
     * @return string
     */
    public function getDimension()
    {
        return $this->dimension;
    }

    /**
     * Set publisher
     *
     * @param string $publisher
     *
     * @return Book
     */
    public function setPublisher($publisher)
    {
        $this->publisher = $publisher;

        return $this;
    }

    /**
     * Get publisher
     *
     * @return string
     */
    public function getPublisher()
    {
        return $this->publisher;
    }

    /**
     * Set imprint
     *
     * @param string $imprint
     *
     * @return Book
     */
    public function setImprint($imprint)
    {
        $this->imprint = $imprint;

        return $this;
    }

    /**
     * Get imprint
     *
     * @return string
     */
    public function getImprint()
    {
        return $this->imprint;
    }

    /**
     * Set language
     *
     * @param string $language
     *
     * @return Book
     */
    public function setLanguage($language)
    {
        $this->language = $language;

        return $this;
    }

    /**
     * Get language
     *
     * @return string
     */
    public function getLanguage()
    {
        return $this->language;
    }

    /**
     * Set isbnNumber
     *
     * @param string $isbnNumber
     *
     * @return Book
     */
    public function setIsbnNumber($isbnNumber)
    {
        $this->isbnNumber = $isbnNumber;

        return $this;
    }

    /**
     * Get isbnNumber
     *
     * @return string
     */
    public function getIsbnNumber()
    {
        return $this->isbnNumber;
    }

    /**
     * Set illustrations
     *
     * @param string $illustrations
     *
     * @return Book
     */
    public function setIllustrations($illustrations)
    {
        $this->illustrations = $illustrations;

        return $this;
    }

    /**
     * Get illustrations
     *
     * @return string
     */
    public function getIllustrations()
    {
        return $this->illustrations;
    }

    /**
     * Set price
     *
     * @param string $price
     *
     * @return Book
     */
    public function setPrice($price)
    {
        $this->price = $price;

        return $this;
    }

    /**
     * Get price
     *
     * @return string
     */
    public function getPrice()
    {
        return $this->price;
    }

    /**
     * Set image
     *
     * @param string $image
     *
     * @return Book
     */
    public function setImage($image)
    {
        $this->image = $image;

        return $this;
    }

    /**
     * Get image
     *
     * @return string
     */
    public function getImage()
    {
        return $this->image;
    }

    /**
     * Set createdAt
     *
     * @param \DateTime $createdAt
     *
     * @return Book
     */
    public function setCreatedAt($createdAt)
    {
        $this->createdAt = $createdAt;

        return $this;
    }

    /**
     * Get createdAt
     *
     * @return \DateTime
     */
    public function getCreatedAt()
    {
        return $this->createdAt;
    }

    /**
     * Set updatedAt
     *
     * @param \DateTime $updatedAt
     *
     * @return Book
     */
    public function setUpdatedAt($updatedAt)
    {
        $this->updatedAt = $updatedAt;

        return $this;
    }

    /**
     * Get updatedAt
     *
     * @return \DateTime
     */
    public function getUpdatedAt()
    {
        return $this->updatedAt;
    }

    /**
     * Set publishedAt
     *
     * @param \DateTime $publishedAt
     *
     * @return Book
     */
    public function setPublishedAt($publishedAt)
    {
        $this->publishedAt = $publishedAt;

        return $this;
    }

    /**
     * Get publishedAt
     *
     * @return \DateTime
     */
    public function getPublishedAt()
    {
        return $this->publishedAt;
    }

    /**
     * Set isPublish
     *
     * @param boolean $isPublish
     *
     * @return Book
     */
    public function setIsPublish($isPublish)
    {
        $this->isPublish = $isPublish;

        return $this;
    }

    /**
     * Get isPublish
     *
     * @return bool
     */
    public function getIsPublish()
    {
        return $this->isPublish;
    }

    /**
     * Set author
     *
     * @param string $author
     *
     * @return Book
     */
    public function setAuthor($author)
    {
        $this->author = $author;

        return $this;
    }

    /**
     * Get author
     *
     * @return string
     */
    public function getAuthor()
    {
        return $this->author;
    }
}


Entity dosyamıza yeni bir çok ek alan ekledik. Bu Entity dosyamızı sık sık güncelleyeceğiz, Şimdilik Yazar/Author alanımız sabit, ileride bunu Relation yapacağız, aynı şekilde buraya yorum alanı ekleyeceğiz, son olarakta Lifecycle Callbacks ile onPrePersist ve onPreUpdate e değineceğiz. Böylece Symfony Doctrine Giriş kısmını bitireceğiz. Akabinde ise, Assert, alanların birlikte indeks yapılması yada unique yapılmasına bakacağız. Devam edelim…

 

Veritabanımızı drop edelim.

db_create_drop.bat adlı dosyanın içini açın ve inceleyin. İçerisinde 3 adet kod var. Bunlar;

php bin/console doctrine:database:drop --force
php bin/console doctrine:database:create
php bin/console doctrine:schema:update --force

Bu kodlar ise sırasıyla şunları yapar;

  1. Veritabanı Drop Eder/Siler.
  2. Veritabanı Yeniden Oluşturur.
  3. Entity dosyalarımızı tarar ve varsa bir değişiklik hızlıca uygular.

Ben sık sık bu işlemleri yaptığım için, böyle hazır bir bat dosyası haline getirdim. Her seferinde kodları tek tek yazmaktan kurtulmak için. Şimdi bu bat dosyasını çalıştırın;

E:\BenVeAlem\SymfonyTutorial>db_create_drop.bat

E:\BenVeAlem\SymfonyTutorial>php bin/console doctrine:database:drop --force
Dropped database for connection named `kitap_db`

E:\BenVeAlem\SymfonyTutorial>php bin/console doctrine:database:create
Created database `kitap_db` for connection named default

E:\BenVeAlem\SymfonyTutorial>php bin/console doctrine:schema:update --force
Updating database schema...
Database schema updated successfully! "1" query was executed

E:\BenVeAlem\SymfonyTutorial>

Böylece veritabanımızı sildik, oluşturduk, ve yeni Entity (Book) dosyamıza göre yeniden oluşturduk.

 

DefaultController.php sayfamızı düzeltelim

Hatırlarsanız, bir önceki yazımda burada bazı değişiklikler yapmıştık. Böylece Doctrine Insert, Update,Delete işlemlerine bakmıştık. O kodları çalıştırırsanız, hata mesajı alacaksınız, çünkü Entity dosyamızı değiştirdik ve NULL olmayan bir kaç alan ekledik. DefaultController.php dosyanızı açın ve içerisini silin, aşağıda ki kodu kopyalayıp içine yapıştırın.

<?php
// E:\BenVeAlem\SymfonyTutorial\src\AppBundle\Controller\DefaultController.php
namespace AppBundle\Controller;

use Sensio\Bundle\FrameworkExtraBundle\Configuration\Route;
use Symfony\Bundle\FrameworkBundle\Controller\Controller;
use Symfony\Component\HttpFoundation\Request;

class DefaultController extends Controller
{
    /**
     * @Route("/", name="homepage")
     */
    public function indexAction(Request $request)
    {
        // replace this example code with whatever you need
        return $this->render('default/index.html.twig', [
            'base_dir' => realpath($this->getParameter('kernel.project_dir')).DIRECTORY_SEPARATOR,
        ]);
    }

}

Böylece bu kısımda bitti.

 

Fikstür için gerekli dizinleri ve dosyaları oluşturalım

src/AppBundle dizini içerisine DataFixtures adlı bir dizin oluşturun. Bu dizinin altına da ORM adlı bir dizin oluşturun. Aşağıdan devam edelim;

  1. src/AppBundle dizini içerisine DataFixtures adlı bir dizin oluşturun.
  2. src/AppBundle/DataFixtures dizini içerisine ORM adlı bir dizin oluşturun.
  3. src/AppBundle/DataFixtures/ORM dizini içerisine fixtures.yml adlı bir dosya oluşturun.
  4. src/AppBundle/DataFixtures/ORM dizini içerisine LoadFixtures.php adlı bir dosya oluşturun.

Bu işlemleri yaptıktan sonra dizin yapınız şöyle olmalı;
DataFixtures

Böylece ana yapıyı oluşturduk, bu kısmı da geçtik.

 

Fikstür oluşturalım

LoadFixtures.php dosyanızı açın, ve aşağıda ki kodu içerisine yapıştırın.

<?php
// E:\BenVeAlem\SymfonyTutorial\src\AppBundle\DataFixtures\ORM\LoadFixtures.php
namespace AppBundle\DataFixtures\ORM;

use Carbon\Carbon;
use Doctrine\Common\DataFixtures\FixtureInterface;
use Doctrine\Common\Persistence\ObjectManager;
use AppBundle\Entity\Book;
use Nelmio\Alice\Fixtures;


class LoadFixtures implements FixtureInterface
{
    public function load(ObjectManager $manager)
    {
        $objects = Fixtures::load(__DIR__.'/fixtures.yml', $manager);
    }
}

LoadFixtures.php dosyasıyla işimiz bu kadar. Bu dosya fixtures.yml yi çağırıyor. Hepsi bu. Asıl işimiz fixtures.yml ile. fixtures.yml dosyanızı açın ve aşağıda kodu buraya yapıştırın.

AppBundle\Entity\Book:
    books_{1..1000}:
        name: <streetName()> <name()>
        excerpt: <text()>
        format: <randomElement($array = array ("Kitap","CD-Audio","Kitap ve CD-Audio"))>
        page: <randomNumber(3)>
        dimension: <randomElement($array = array ("110 x 176 x 44mm","112 x 176 x 34mm","106 x 170 x 26mm", "112 x 176 x 44mm"))>
        publisher: <company()> Inc
        imprint: <company()>
        language: <randomElement($array = array ("Türkçe","English"))>
        isbnNumber: <isbn13()>
        illustrations: <randomElement($array = array ("CD Var","Harita Var", "CD ve Harita Var", "Yok"))>
        price: <randomNumber(2)>
        image: <randomElement($array = array ("none.jpg","1.jpg", "2.jpg", "3.jpg"))>
        createdAt: '<dateTimeBetween("-1000 days", "now")>'
        updatedAt: '<dateTimeBetween("-600 days", "now")>'
        publishedAt: '<dateTimeBetween("-100 days", "now")>'
        author: '<firstName()> <lastName()>'
        isPublish: <randomElement($array = array (true,false))>

Hepsi bu, isterseniz önemli kısımları hızlıca açıklayayım.

books_{1..1000}:

Yukarıda ki satır, kaç adet dummy kitap oluşturacağımız söylüyor. Örneğimiz de 1000 adet dummy data oluşturacak. Eğer çalıştırdığınız da hata verirse, bellek yetersiz der ise, 1000 gördüğünüz yeri 100 yapın.

text(): Rastgele text metni getiriyor.
streetName(): Rastgele cadde adı.
name(): Rastgele isim, Ad ve Soyad
company(): Rastgele Firma adı.
isbn13(): Rastgele ISBN numarası
randomElement(…): Array içerisinde değerlerden birini rastgele seçiyor.
dateTimeBetween(“-1000 days”, “now”): Bugün ile, 1000 gün önceki tarih arasından rastgele bir tarih seçiyor.
firstName() : Rastgele isim.
lastName() Rastgele Soyisim

Bunlar gibi niceleri var, rastgele credi cartı, kullanıcı adı, renk, resim, email, slug, adres, ülke, şehir vs vs vs. Daha fazlası için Nelmio/Alice ve Fzaninotto/Faker uygulamalarının resmi sitelerine bakabilir, daha detaylı bilgi edinebilirsiniz.

Artık hazırız. Yapmamız gereken tek şey, Fikstür dosyamızı çalıştırmak. Böylece dummy data larımız oluşacak. Çalıştırmak için aşağıda ki kodu verin.

php bin/console doctrine:fixtures:load

Bu kodu yazıp, enter tuşuna basarsanız size bir uyarı mesajı gösterecek ve size devam etmek isteyip istemediğinizi soracak.

Careful, database will be purged. Do you want to continue y/N ?

Özetle database de olan eski bilgileri temizleyeceğini söylüyor. “y” tuşuna basarsanız eski bilgileri silecek ve size 1000 adet dummy data oluşturacak. y tuşuna basın. İşlem bittikten sonra şöyle bir ekran görmelisiniz.

E:\BenVeAlem\SymfonyTutorial>php bin/console doctrine:fixtures:load
Careful, database will be purged. Do you want to continue y/N ?y
  > purging database
  > loading AppBundle\DataFixtures\ORM\LoadFixtures

E:\BenVeAlem\SymfonyTutorial>

Böyle bir ekran gördüyseniz, her hangi bir hata mesajı almadıysanız, veritabanınızı kontrol edin, Örneğimize göre gidersek eğer, veritabanızda bulunan book adlı tabloda 1000 adet kayıt olması gerekiyor.

Örnek Dummy Data

 

Özet

Böylece bu yazımın sonuna geldik. El ile 3-5 kayıt oluşturmak hem çok sıkıcı hem de gereksiz vakit alıyor. Bu nedenle Dummy Data bizim için önemli. Gördüğünüz üzere hızlıca 1000 adet kayıt oluşturduk. Bir sonra ki yazımda, bu oluşturduğumuz datalarla sorgular yapacağız. Bu yazı bir ön hazırlık yazısı diye düşünülebilir.

Şuana kadar yaptığımız herşeyi, GitHub sayfama yükleyeceğim, dilerseniz kodları oradan da inceleye bilirsiniz, yada komple indirip kurup, çalıştırabilirsiniz.

Bir sonraki yazımda görüşmek dileği ile…