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 чи ні, не знаю. Але впевнений, що в такій нехитрій, а подекуди навіть невигадливій реалізації, його можна застосовувати у простих проектах. А якщо добре попрацювати над ним, то і в складних йому знайдеться місце.