Yii2 save related records in single save call in single transaction

Gaurav Singla picture Gaurav Singla · Nov 11, 2014 · Viewed 19.6k times · Source

In yii2 how can i save multiple related records into db into single save call and single transaction. I have two tables:

User - id, name
UserAddress - id , user_id , city

User table has one to many relation to UserAdress table

What i want to do is :

UserAddress ua = new UserAddress();
ua.city = "fff"

User u = new User();
u.name = "test";
u.userAddress = new Array(ua);
u.save();

calling save on user should save user and useraddress with user_id set to user.id as well

Answer

Andrey S. Rabchevsky picture Andrey S. Rabchevsky · Mar 12, 2015
 // You need create hasMany relation 'userAddress' (look guide relations)

$transaction = Yii::$app->db->beginTransaction();

try {

    $user = new User();
    $user->name = 'Name';
    $user->save();

    $ua = new UserAddress();
    $ua->city = 'City';

    $user->link('userAddress', $ua); // <-- it creates new record in UserAddress table with ua.user_id = user.id

    $transaction->commit();

} catch (Exception $e) {

    $transaction->rollBack();

}