Робота з 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.