Робота з doctrine у ​​symfony framework

Отже, ми вже теоретично знаємо (тут могли прочитати), для чого Doctrine. які вона дає переваги в порівнянні з "голими" sql запитами. Тепер переходимо до практики.

Як вже радив в попередньому уроці, найпростіший шлях - створити ORM на основі існуючої бази даних. Для цього знадобиться всього дві команди:

Таким чином ми створимо конфиг для побудови моделі. Формат може бути різним, наприклад, yml, xml і т.д. Після цього створимо ORM:

На цьому створення ORM можна вважати закінченим. При чому якщо таблиці були пов'язані, всі необхідні зв'язки відразу ж були створені в моделі. Можна починати роботу з БД.

Примітка. В результаті першої команди створюється конфігурація БД (за замовчуванням у src / Path_to_bundle / Resources / config / doctrine. Іноді доводиться її правити, наприклад, для можливості завдання значень за замовчуванням, про це в одній з наступних нотаток.

Друга команда генерує класи т.зв. mapping. разом з т.зв. getters і setters методами. (За замовчуванням, в src / Path_to_bundle / Entity). Ці класи і є уявлення таблиць БД.

Якщо у вас немає готової БД і ви хочете її створити, викличте

Видалення ДБ можливо командою

Це викличе інтерактивний генератор. Слідуючи його інструкціям, ви створите модель (mapping). На підставі цієї моделі можна створити таблиці в БД. Після завершення роботи з інтерактивним генератором, створимо модель, як уже писалося раніше

Створити таблиці в базі, використовуючи mapping:

Переходимо безпосередньо до роботи з БД, використовуючи Doctrine. Ця замітка вступна, так що поки що будемо обходиться без DQL-запит.

Ака SELECT Щоб зробити просту вибірку з однієї таблиці БД, досить написати в контролері:

Метод find ($ id) робить вибірку по id (по primary key). Крім цього, є методи

findAll () - отримуємо все записи в таблиці,

findBy (array ( 'field' => 'value')) - вибірка з умовою, наприклад,

// А це сортування array ( 'price' => 'ASC'));

Як ви, напевно, здогадалися, тип $ products - це наша згенерувала модель (mapping). (Те, що в src / Path_to_bundle / Entity)

Ака INSERT / UPDATE Дуже зручно, що при використанні Doctrine різниця між додаванням записи і оновленням існуючої мінімальна. Все залежить тільки від того, який об'єкт ви оновлюєте - той, для якого був зроблений перш SELECT. чи ні.

Почнемо з додавання (INSERT) в БД:

// Створюємо екземпляр моделі $ product = new Product;

// Задаємо значення полів $ product-> setValue ( 'value') ;.

// Передаємо менеджеру об'єкт моделі $ em-> persist ($ product)

// Додаємо запис в таблицю $ em-> flush ();

Оновлення (UPDATE) відрізняється тим, що треба спочатку вибрати запис для поновлення. І все!

// Вибираємо запис для поновлення - в цьому рядку вся різниця $ product = $ em-> getRepository ( 'AcmeStoreBundle: Product') - gt; find ($ id);

// Задаємо значення полів $ product-> setValue ( 'value') ;.

// Передаємо менеджеру об'єкт моделі $ em-> persist ($ product)

// Додаємо запис в таблицю $ em-> flush ();

Для видалення, потрібно тільки викликати remove () замість persist ():

На цьому поки все. Ми навчилися виконувати елементарні дії з БД в Symfony framework. використовуючи Doctrine.