Работа с запросами в Yii 2.x. Добавление, изменение и удаление данных из таблицы (часть 4)

В заключительной статье по работе с запросами в Yii 2.x рассмотрим примеры добавления, изменения и удаления данных из таблицы. За основу берем таблицу  Country (Страны) известную нам из предыдущих 3 статей. Таблица состоит из следующих полей: номер (id), название страны (name), количество жителей (number) и площадь (area).

Добавление данных в таблицу

Insert() или Save() 

Insert(), save() осуществляют добавление данных в таблицу. Добавим в таблицу Country Англию.

// создаем экземпляр класса
$model = new Country; // добавляем название страны
$model->name = 'Англия'; // добавляем населенность
$model->number = '53012456'; // добавяем количество жителей
$model->area = '133396'; // сохраняем запись, за место метода save() можно использовать метод insert() ($model->insert())
$model->save();

Результат:

Insert() при работе с DAO

Рассмотрим 2 способ добавления записи

//Соединение с базой данных
$connection = Yii::$app->db; // выполняем команду вставки (параметры таблица Country, массив с данными) и выполняем запрос
$connection->createCommand()->insert('Country', ['name' => 'Англия', 'number' => '53012456', 'area' => '133396'])->execute();

batchInsert()

batchInsert() добавляет сразу несколько записей. Добавим в таблицу Country 2 страны Аргентину и китай

//Соединение с базой данных
$connection = Yii::$app->db; // выполняем команду вставки
$connection->createCommand()->batchInsert('Country', ['name', 'number', 'area'], )->execute();

Результат:

Изменение данных в таблице

Update() или Save() 

update(), save() осуществляют изменения данных в таблице. Изменим численность населения в Китае

// Номер Китая в таблице
$id = 7;
// Запрос с выборкой Китая
$model = Country::find()->where(['id' => $id])->one();
// изменяем численность населения
$model->number = '1000000000';
// сохраняем, можно использовать $model->update(); 
$model->save();   

Результат:

UpdateAll()

UpdateAll() - обновляет все записи. Сделаем количество всех жителей всех стран 1000000000

$model = Country::updateAll(['number' => 1000000000]);

Результат:

Update() при работе с DAO

Изменим численность жителей в России

//Соединение с базой данных
$connection = Yii::$app->db; // выполняем запрос к таблицеCountry, устанавливаем количество жителей равным 146519759, при условии что это Россия
$connection->createCommand()->update('Country', ['number' => 146519759], 'id = 1')->execute();

Результат:

Update с помощью SQL запроса

Приведем аналогичный пример только с помощью SQL запроса

//Соединение с базой данных
$connection = Yii::$app->db; // выполняем запрос к таблицеCountry, устанавливаем количество жителей равным 146519759, при условии что это Россия
$connection->createCommand('Update Country Set number = 146519759 Where id=1')->execute();

Удаление данных из таблицы

Delete()

delete() удаляет данные из таблицы. Удалим Китай из таблицы Country.

// выбираем из таблицы Китай
$model = Country::find()->where(['name' => 'Китай'])->one();
// удаляем строку
$model->delete();

Delete() при работе с DAO

Приведем второй способ

//Соединение с базой данных
$connection = Yii::$app->db; // выполняем запрос
$connection->createCommand()->delete('Country', 'name = "Китай"')->execute();

Delete() с параметрами

Удалим Аргентину и Англию

// соединяемся с базой
$connection = Yii::$app->db;
// выполняем запрос
$model = $connection->createCommand('Delete From country Where name=:name');
// привязываем параметр
$model->bindParam(':name', $name);
// присваиваем переменной Англию
$name = "Англия";
// выполняем запрос
$model->execute();
// присваиваем переменной Аргентину
$name = "Аргентина";
// выполняем запрос
$model->execute();

Результат:

DeleteAll()

DeleteAll() удаляет все записи. Удалим все страны у которых на данный момент в таблице количество жителей равно 1000000000

Country::deleteAll('number = :number', [':number' => 1000000000]);

Результат:

Внимание: Таблица может иметь подчиненные таблицы, и тогда запрос на удаление записи или нескольких записей выдаст ошибку. Для решения проблемы необходимо изначально удалить все записи в подчиненной таблице, связанные с записью или записами во внешней таблице, а затем удалить запись во внешней таблице!