Работа с базами данных у Symfony framework. Введение (Урок 9. Ознакомление с Doctrine)

Мы уже не маленькие, уже умеем работать с контроллером, настраивать routing систему для обработки входных данных контроллером и создавать представление. Следующим логическим шагом будет обучение работе с базами данных у Symfony framework на примере Doctrine.Эта заметка вводная, но все же с самого начала надо сказать некоторые вещи, которые будут очень полезными при дальнейшем изучении Doctrine. Итак, для начала, будет очень удобно, если существующие таблицы (если сначала у вас есть спроектированная база данных, советую именно этот вариант, хотя опишу и возможность создания БД после проектирования ее модели) будут типа InnoDB. Если раньше были созданы таблицы MyISAM, прочитать о том, как их переконвертировать можно здесь. InnoDB необходима для создания связей (foreign key) между таблицами.

Symfony framework использует популярный на сегодня метод работы з базами данных через ORM - Object-relational mapping. Суть в том, что между БД и программистом создается некоторый абстрактный слой. Теперь не надо писать запросы напрямую в базу данных, достаточно обращаться к этому слою. Это создает несколько преимуществ. Во первых, проще и короче код. Во вторых, автоматически избавляемся от ошибок при проектировании запросов, или даже автоматическая или настраиваемая валидация. И, наверное, одно из главных преимуществ - вам не нужно знать особенностей конкретной СУБД - вам нужно только знать интерфейс работы с абстрактным слоем, все остальное сделают за вас.

DB ORM

Сначала надо сконфигурировать Symfony framework для работы с БД. По умолчанию конфиг находится в app/config/parameters.yml. Расположение можно сменить на любое (если вам так более удобно, подключение файла параметров осуществляется в файле app/config/config.yml). Содержимое app/config/parameters.yml:

parameters:
    database_driver: pdo_mysql
    database_host: 127.0.0.1
    database_port: null
    database_name: symfony
    database_user: root
    database_password: pass
    mailer_transport: smtp
    mailer_host: 127.0.0.1
    mailer_user: null
    mailer_password: null
    locale: ru
    secret: 9a78eae13ab2ced383f3124a3e607c9f31e7f3e8
    database_path: null
Надеюсь, конфиг интуитивно понятен - задаем тип базы (MySQL в моем случае), а также параметры для соединения - хост, пользователь, пароль.

Если хотите использовать SQLite, необходимо указать в параметрах расположение файла:

# app/config/config.yml
doctrine:
  dbal:
    driver: pdo_sqlite
    path: "%kernel.root_dir%/sqlite.db"
    charset: UTF8
На этом все - теперь Symfony framework сконфигурирован для работы с БД. В следующих заметках рассмотрим конкретные примеры.