Yii - Активная запись
Active Record предоставляет объектно-ориентированный API для доступа к данным. Класс Active Record связан с таблицей базы данных.
Yii предоставляет поддержку Active Record для следующих реляционных баз данных:
- MySQL 4.1 или новее
- SQLite 2 и 3:
- PostgreSQL 7.3 или новее
- Microsoft SQL Server 2008 или новее
- CUBRID 9.3 или новее
- Oracle
- ElasticSearch
- Sphinx
Кроме того, класс Active Record поддерживает следующие NoSQL базы данных -
- Redis 2.6.12 или новее
- MongoDB 1.3.0 или новее
После объявления класса Active Record (MyUser модель в нашем случае) для отдельной таблицы базы данных, вы должны выполнить следующие шаги, чтобы запросить данные из нее:
- Создайте новый объект запроса, используя метод yii \ db \ ActiveRecord :: find ().
- Создайте объект запроса.
- Вызовите метод запроса для получения данных.
Step 1 - Измените actionTestDb() метод таким образом.
public function actionTestDb() {
// return a single user whose ID is 1
// SELECT * FROM `user` WHERE `id` = 1
$user = MyUser::find() ->where(['id' => 1]) ->one(); var_dump($user);
// return the number of users
// SELECT COUNT(*) FROM `user`
$users = MyUser::find() ->count(); var_dump($users);
// return all users and order them by their IDs
// SELECT * FROM `user` ORDER BY `id`
$users = MyUser::find() ->orderBy('id') ->all(); var_dump($users);
}
Приведенный выше код показывает, как использовать ActiveQuery для запроса данных.
Step 2 - Перейти к http://localhost:8080/index.php?r=site/test-db, вы увидите следующий результат.
Запросы по значениям первичного ключа или набору значений столбцов - обычная задача, поэтому Yii предоставляет следующие методы:
yii\db\ActiveRecord::findOne() - Возвращает один экземпляр Active Record
yi\db\ActiveRecord::findAll() - Возвращает массив экземпляров Active Record
Example -
public function actionTestDb() {
// returns a single customer whose ID is 1
// SELECT * FROM `user` WHERE `id` = 1
$user = MyUser::findOne(1); var_dump($user);
// returns customers whose ID is 1,2,3, or 4
// SELECT * FROM `user` WHERE `id` IN (1,2,3,4)
$users = MyUser::findAll([1, 2, 3, 4]); var_dump($users);
// returns a user whose ID is 5
// SELECT * FROM `user` WHERE `id` = 5
$user = MyUser::findOne([ 'id' => 5 ]); var_dump($user);
}
Сохранить данные в базу данных
Для сохранения данных в базе необходимо вызвать yii\db\ActiveRecord::save() метод.
Step 1 - Измените actionTestDb() метод таким образом.
public function actionTestDb() {
// insert a new row of data
$user = new MyUser(); $user->name = 'MyCustomUser2';
$user->email = '[email protected]'; $user->save();
var_dump($user->attributes); // update an existing row of data $user = MyUser::findOne(['name' => 'MyCustomUser2']);
$user->email = '[email protected]'; $user->save();
var_dump($user->attributes);
}
Step 2 - Перейти к http://localhost:8080/index.php?r=site/test-db, вы увидите следующий результат.
Чтобы удалить одну строку данных, вы должны:
Получить экземпляр Active Record
Позвоните в yii\db\ActiveRecord::delete() метод
Step 1 - Измените actionTestDb() метод таким образом.
public function actionTestDb() {
$user = MyUser::findOne(2);
if($user->delete()) {
echo "deleted";
}
}
Step 2 - Тип http://localhost:8080/index.php?r=site/test-db в адресной строке веб-браузера вы увидите следующий результат.
Step 3 - Вы также можете позвонить в yii\db\ActiveRecord::deleteAll() например, для удаления нескольких строк данных.
public function actionTestDb() {
MyUser::deleteAll('id >= 20');
}