04 / 04 / 2017 Developers

Tworzenie bazy danych oraz encji za pomocą Doctrine w Symfony

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%'

Kolejnym krokiem, jeśli nasza baza danych jeszcze nie istnieje, będzie stworzenie jej. Możemy to zrobić przy użyciu następującej komendy:

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 nameNastę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