В YII працювати з БД можна багатьма способами. Можна як напряму виконувати запити, так і використовувати конструктор запитів. Для того щоб спростити роботу з БД і скоротити час, що затрачується на написання запитів до БД, в YII одним з варіантів роботи з БД є використання моделей. Ектів рекорд - потужний засіб, що буде тут розглянуто.
Для використання функцій пошуку даних у таблиці ми не будемо створювати новий об'єкт. Натомість ми будемо звертатись до до нього у контексті класу моделі. Якщо функції пошуку не знаходять результату, що відповідає критеріям пошуку - вони повертають false Приклад буде продемонстровано далі.
Функції пошуку даних у таблиці (рараз ми працюємо з однією таблицею, реляційні БД будуть потім):
findByPk
findAllByPk
Код, поданий нижче, повинен бути розташований у файлі класу контролера (наприклад в середині файлу SiteControler.php).
Приклад коду:
$rc=Repaircntrs::model()->findByPk(1);//знаходим рядок зі значенням первинного ключа 1
echo $rc->name; //друкуємо значення name знайденого рядка
Як видно дана функція повертає в якості результату об'єкт, поля якого відповідають полям таблиці в БД.
$array=array(1,2,3);
$rc=Repaircntrs::model()->findAllByPk($array);//знаходим рядки зі значеннями первинного ключа 1, 2 і 3
foreach($rc as $rc_a){//друкуємо значення name знайдених рядків послідовно
echo $rc_a->name;
}
Функція findAllByPk в якості результату повертає масив об'єктів.
Функції find і findAll - функції що дозволяють задавати власні критерії пошуку.
$name='Неосервіс';
//шукаємо по імені, ім'я передаємо в якості параметру, щоб уберегтись від ін'єкцій
$rc=Repaircntrs::model()->find('name=:name', array(':name'=>$name));
echo $rc->name;
Дані функції працюють аналогічно попереднім двом. Вони повертають заповнений об'єкт або false. Функція find повертає перший знайдений елемент таблиці. Функція findAll повертає всі знайдені елементи
Функції оновлення даних. Представлені функціями updateAll i updateByPk.
Також варіант оновлення даних, ним користуюсь я сам - спочатку знайти необхідний рядок. І, якщо він знайдений, одному з його атрибутів присвоїти нове значення і викликати метод save(). Приклад:
$name='Неосервіс';
//шукаємо по імені, ім'я передаємо в якості параметру, щоб уберегтись від ін'єкцій
$rc=Repaircntrs::model()->find('name=:name', array(':name'=>$name));
$rc->name='Просто-сервіс';//присвоюємо нове значення полю
$rc->save();//зберігаємо зміни в БД