В заключительной статье по работе с запросами в Yii 2.x рассмотрим примеры добавления, изменения и удаления данных из таблицы. За основу берем таблицу Country (Страны) известную нам из предыдущих 3 статей. Таблица состоит из следующих полей: номер (id), название страны (name), количество жителей (number) и площадь (area).
Insert(), save() осуществляют добавление данных в таблицу. Добавим в таблицу Country Англию.
// создаем экземпляр класса
$model = new Country; // добавляем название страны
$model->name = 'Англия'; // добавляем населенность
$model->number = '53012456'; // добавяем количество жителей
$model->area = '133396'; // сохраняем запись, за место метода save() можно использовать метод insert() ($model->insert())
$model->save();
Результат:
Рассмотрим 2 способ добавления записи
//Соединение с базой данных
$connection = Yii::$app->db; // выполняем команду вставки (параметры таблица Country, массив с данными) и выполняем запрос
$connection->createCommand()->insert('Country', ['name' => 'Англия', 'number' => '53012456', 'area' => '133396'])->execute();
batchInsert() добавляет сразу несколько записей. Добавим в таблицу Country 2 страны Аргентину и китай
//Соединение с базой данных
$connection = Yii::$app->db; // выполняем команду вставки
$connection->createCommand()->batchInsert('Country', ['name', 'number', 'area'], )->execute();
Результат:
update(), save() осуществляют изменения данных в таблице. Изменим численность населения в Китае
// Номер Китая в таблице $id = 7; // Запрос с выборкой Китая $model = Country::find()->where(['id' => $id])->one(); // изменяем численность населения $model->number = '1000000000'; // сохраняем, можно использовать $model->update(); $model->save();
Результат:
UpdateAll() - обновляет все записи. Сделаем количество всех жителей всех стран 1000000000
$model = Country::updateAll(['number' => 1000000000]);
Результат:
Изменим численность жителей в России
//Соединение с базой данных
$connection = Yii::$app->db; // выполняем запрос к таблицеCountry, устанавливаем количество жителей равным 146519759, при условии что это Россия
$connection->createCommand()->update('Country', ['number' => 146519759], 'id = 1')->execute();
Результат:
Приведем аналогичный пример только с помощью SQL запроса
//Соединение с базой данных
$connection = Yii::$app->db; // выполняем запрос к таблицеCountry, устанавливаем количество жителей равным 146519759, при условии что это Россия
$connection->createCommand('Update Country Set number = 146519759 Where id=1')->execute();
delete() удаляет данные из таблицы. Удалим Китай из таблицы Country.
// выбираем из таблицы Китай $model = Country::find()->where(['name' => 'Китай'])->one(); // удаляем строку $model->delete();
Приведем второй способ
//Соединение с базой данных
$connection = Yii::$app->db; // выполняем запрос
$connection->createCommand()->delete('Country', 'name = "Китай"')->execute();
Удалим Аргентину и Англию
// соединяемся с базой $connection = Yii::$app->db; // выполняем запрос $model = $connection->createCommand('Delete From country Where name=:name'); // привязываем параметр $model->bindParam(':name', $name); // присваиваем переменной Англию $name = "Англия"; // выполняем запрос $model->execute(); // присваиваем переменной Аргентину $name = "Аргентина"; // выполняем запрос $model->execute();
Результат:
DeleteAll() удаляет все записи. Удалим все страны у которых на данный момент в таблице количество жителей равно 1000000000
Country::deleteAll('number = :number', [':number' => 1000000000]);
Результат:
Внимание: Таблица может иметь подчиненные таблицы, и тогда запрос на удаление записи или нескольких записей выдаст ошибку. Для решения проблемы необходимо изначально удалить все записи в подчиненной таблице, связанные с записью или записами во внешней таблице, а затем удалить запись во внешней таблице!