Създаване на нова база данни в Symfony с Doctrine?

+4 гласа
65 прегледа
попитан 2016 юни 15 в PHP от TTTodorov. (1,660 точки)
В един страничен проект ми се наложи да създавам база данни в Symfony с Doctrine. Някой може ли да ми обясни как се случва това?

1 отговор

+1 глас
отговорени 2016 юни 15 от Deyan Delev (1,830 точки)

Здравей,

В Symfony създаването на база данни с Doctrine е доста лесно.

Но какво e Doctrine?

Doctrine се използва за извличането на данни от БД, то също така може да създава, променя или изтрива БД. Doctrine не е част от Symfony, той е bundle, което ще рече, че това е плъгин (както обикновено се нарича в други подобни frameworks), интересуващ се само от БД. Разбира се това ви дава пълната свобода да използвате друг тип връзка за данни, например – PDO или пък PHPRC, избора е ваш.

Doctrine e ORM, съкратено от Оbject Rational Mapper, накратко това означава, че всяка таблица в БД ще има кореспондиращ PHP  клас, който ние трябва да създадем. Когато направим заявка към дадена таблица с име “cars”, Doctrine ще ни върне обект „cars”. Всяко свойство на класа отговаря на колона в таблицата. Кореспонденцията (mapping) между таблицата и PHP класа е основната цел на Doctrine.

Как да създадем база данни с Doctrine?

Преди да започнем процедурата с Doctrine, трябва да сме си настроили конфигурационният файл parameters.yml, намиращ се в app/config/. Oтворете го и ще видите, че в него трябва да се въведат някои данни:

database_host: 127.0.0.1
database_port: null
database_name: <име на базата данни>
database_user: <потребител на базата данни>
database_password: <парола> (ако има зададена)

Не се налага да ровите в базата данни, всичко, което трябва да направите е да създадете нов клас, тогава Doctrine ще може да създаде таблица, базирана на този клас. Целият процес ще трае около 2 минути и ще е с дължина малко повече от 20 линии код.

В src/AppBundle/ Създаваме директория Entity. Не се плаши от името, Entity не означава определение за извънземен паразит, Еntity e просто клас, който Doctrine просто ще map-не към таблицата от базата данни.


В тази директория създаваме клас, който за примера ще кръстим Cars:

<?php
namespace AppBundle\Entity;

class Cars
{

}

Тук ще добавим use statement, за да можем с клавишната комбинация Alt+Insert да генерираме анотация, за да знае Doctrine как ще се казва нашата таблица:
namespace AppBundle\Entity;

use Doctrine\ORM\Mapping as ORM;

/**
 * @ORM\Entity
 * @ORM\table (name="Cars")
 */

class Cars


Добавяме две свойства на класа – $id и $name, които ще отговарят на колони от нашата бъдеща таблица. Отново натискаме клавишната комбинация Аlt+Insert за да генерираме ORM анотация, в отворения прозорец селектираме и двете свойства и натискаме ОК. Резултата:

class Cars
{
   
/**
     * @ORM\Id
     * @ORM\GeneratedValue(strategy="AUTO")
     * @ORM\Column(type="integer")
     */

    private $id;
   
/**
     * @ORM\Column(type="string")
     */

    private $name;
}

Приключихме с писането на код, сега отваряме конзолата и пишем в нея следните команди:

  • app/console doctrine:database:create

тази команда ще създаде база данни, която сме задали в parameters.yml

  • app/console doctrine:schema:update --dump -sql (или --force)

тази команда ще създаде таблицата „cars”, съдържаща в себе си двете колони id и name.

Готово! Сега вече имаме база данни. Лесно е нали?

...