Здравей,
В 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.
Готово! Сега вече имаме база данни. Лесно е нали?