ActiveRecord своїми рукамина PHP
Доброго вам дня! Я працюю над веб-проектом X. Проект великий, складний та перспективний. Але, як і в будь-якому іншому проекті, є багато коду, написаного поспіхом з позначкою «коли виправлю».
Настав час виправляти.
Читаючи черговий мануал, я виявив шаблон проектування Active Record. Простий запит у Google, і ось уже подруга Вікіпедія коротко і ясно розповіла про все (https://ua.wikipedia.org/wiki/ActiveRecord). Сенс шаблону простий: до роботи з таблицями у базі даних було вирішено створити спеціальний клас, який виконував все основні дії (CRUD). Ось все, що потрібно для підключення: помістимо в масив $dbConfig (тут буде 5 елементів): host, user, pass, db, table.
Нехай функція setConfigDB заповнить потрібними значеннями $dbConfig.
Тепер створимо метод підключення до БД:
Головне потім треба не забути, що тут як параметри передаються масиви. Foreach працює з ними, а без нього проблемно створити запит із кількома полями та відповідними значеннями. Параметр $key у нас набуває імен полів, параметр $value — значення, які треба записати у відповідні поля. У функції два цикли, спочатку пишемо всі поля, а потім усі значення. Користуємося стандартними можливостями PHP, щоб отримати потрібний рядок. Наприкінці підключаємося до БД та виконуємо запит. Підключення до БД приховано, щоб програміст лише передав потрібну інформацію в метод.
Для читання даних та таблиці будемо використовувати дві функції selectAll() та select($fields). За змістом їх можна поєднати в одну, але за фактом простіше створити дві.
Оскільки інструкція SELECT поверне нам результат, то в return помістимо $result =mysql_query($query); Далі видалення.
Метод - одноразовий. Один виклик — видалено один рядок. Відомо, що інструкція DELETE повертає число віддалених рядків, для зручності повернемо їх return $result = mysql_query($query); Тепер оновимо наші записи в табличці:
Функція містить 4 вхідні параметри $key, $value, $where_key, $where_value. Може здатися, що їх дуже багато, але з іншого боку інструкція UPDATE досить докладна.
Так ось $key=$value це те, що ми помістимо на місце старого запису, а $where_key і $where_value це те, де нам шукати. Тобто: знаходимо рядок з полем $where_key значення якого дорівнює $where_value, у ньому записуємо значення $value у полі $key. Начебто складно, але якщо прочитати команду в SQL, то відразу стає зрозумілим, що до чого. Клас готовий, тепер попрацюємо з екземпляром:
Створимо новий об'єкт, запишемо все необхідне для подальшої роботи:
Далі вставимо запис у табличку:
Не забуваємо, що метод insert як параметри передаються масиви. Давайте тепер подивимося, що в нас вийшло в таблиці:
Тут я спеціально не став шукати і вигадувати способу виведення даних, тому що основне завдання нашого класу саме робота з БД. Введення даних програміст сам сформує як треба, чи зверстає окремий клас при цьому. Тепер проведемо вибірку по конкретних полях. У моєму випадку одне.
Загалом все. Вийшло те, що хотілося б вважати прийнятним для роботи. Відносити цей клас до справжніх Active Record чи ні, не знаю. Але впевнений, що в такій нехитрій, а подекуди навіть невигадливій реалізації, його можна застосовувати у простих проектах. А якщо добре попрацювати над ним, то і в складних йому знайдеться місце.