@jensen
Для записи данных в две таблицы в Yii2 можно использовать транзакции и модели ActiveRecord.
Например, если у вас есть таблицы table1
и table2
, и каждая запись в table1
может иметь несколько связанных записей в table2
, то связь можно определить так:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 |
class Table1 extends yiidbActiveRecord { public function getTable2() { return $this->hasMany(Table2::className(), ['table1_id' => 'id']); } } class Table2 extends yiidbActiveRecord { public function getTable1() { return $this->hasOne(Table1::className(), ['id' => 'table1_id']); } } |
1 2 3 4 5 6 7 8 9 10 |
$table1 = new Table1(); $table1->attribute1 = 'value1'; $table1->attribute2 = 'value2'; $table1->save(); $table2 = new Table2(); $table2->attribute3 = 'value3'; $table2->attribute4 = 'value4'; $table2->table1_id = $table1->id; $table2->save(); |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 |
$transaction = Yii::$app->db->beginTransaction(); try { $table1 = new Table1(); $table1->attribute1 = 'value1'; $table1->attribute2 = 'value2'; $table1->save(); $table2 = new Table2(); $table2->attribute3 = 'value3'; $table2->attribute4 = 'value4'; $table2->table1_id = $table1->id; $table2->save(); $transaction->commit(); } catch (Exception $e) { $transaction->rollBack(); throw $e; } |
Это позволит сохранить данные в обе таблицы только в случае, если операция завершится успешно. Если произойдет ошибка, то все изменения будут отменены, и база данных вернется в исходное состояние.
@jensen
Это примерный код для записи данных в 2 таблицы с использованием транзакции в Yii2 framework. Вам необходимо заменить названия таблиц и их атрибутов на соответствующие вашей базе данных. Предварительно вам также необходимо создать модели ActiveRecord для таблиц.
Если у вас есть дополнительные условия или требования для записи данных в две таблицы, предложенный код может быть модифицирован.