Tworzenie bazy danych oraz encji za pomocą Doctrine w Symfony

W dzisiejszym wpisie nauczymy bardzo przydatnej rzeczy – mianowicie, jak tworzyć bazę danych i encje za pomocą Doctrine.

Na samym początku musimy powiedzieć Doctrine jak ma się łączyć z naszą bazą danych, w tym celu powinniśmy dodać parametry dostępu do naszej bazy w pliku parameters.yml: # app/config/parameters.yml.

parameters:
    database_driver:    pdo_mysql
    database_host:      127.0.0.1
    database_name:      nazwa
    database_user:      uzytkownik
    database_password:  haslo

Następnie przechodzimy do pliku config.yml

# app/config/config.yml

doctrine:
    dbal:
        driver:   '%database_driver%'
        host:     '%database_host%'
        dbname:   '%database_name%'
        user:     '%database_user%'
        password: '%database_password%'

Encje

Encja powinna posiadać swoje unikalne ID, zupełnie jak każdy rekord, który jej odpowiada w bazie danych. Posiada ona też informację o mapowaniu tej encji oraz jej poszczególnych pól, najczęściej przez wykorzystanie adnotacji, ale istnieje także możliwość wykorzystania do tego yamla czy też xmla.

Przykładowa encja (adnotacje):

<?php
namespace AppBundle\Entity;

use Doctrine\ORM\Mapping as ORM;

/**
 * @ORM\Entity
 * @ORM\Table(name="product")
 */
class Product
{
    /**
     * @ORM\Column(type="integer")
     * @ORM\Id
     * @ORM\GeneratedValue(strategy="AUTO")
     */
    private $id;

    /**
     * @ORM\Column(type="string", length=100)
     */
    private $name;
     /**
     * @ORM\Column(type="decimal", scale=2)
     */
    private $price;

    /**
     * @ORM\Column(type="text")
     */
    private $description;
}

i ten sam przykład w yamlu:

# AppBundle\Entity\Product

type: entity
table: product
id:
    id:
        type: integer
        generator: { strategy: AUTO }
fields:
    name:
        type: string
        length: 100
    price:
        type: decimal
        scale: 2
    description:
        type: text

Doctrine sam potrafi się „domyślić” nazw tabel oraz poszczególnych pól encji, ale także możemy im nadawać inne nazwy przy użyciu własności name. Następnie powinniśmy dodać gettery oraz settery, ale symfony udostępnia nam możliwość wygenerowania ich za pomocą komendy:

php bin/console doctrine:generate:entities AppBundle/Entity/Product

Kolejną przydatną komendą będzie wygenerowanie tabel na podstawie naszych istniejących już encji:

php bin/console doctrine:schema:update --force

Powinniśmy już mieć wygenerowane gotowe tabele na podstawie naszych encji.

FacebookTwitterGoogle+LinkedIn