From f13e3647b11891f3b08e7a45602b2b8d06eec883 Mon Sep 17 00:00:00 2001 From: Alban Jubert Date: Sun, 18 Mar 2018 18:10:55 +0100 Subject: [PATCH] Small refactoring --- src/SaveRelationsBehavior.php | 34 ++++++++++++++++++++-------------- 1 file changed, 20 insertions(+), 14 deletions(-) diff --git a/src/SaveRelationsBehavior.php b/src/SaveRelationsBehavior.php index be5d8d0..5275bec 100644 --- a/src/SaveRelationsBehavior.php +++ b/src/SaveRelationsBehavior.php @@ -217,9 +217,7 @@ class SaveRelationsBehavior extends Behavior if (empty($fks)) { // Get the right link definition if ($relation->via instanceof BaseActiveRecord) { - /** @var BaseActiveRecord|array $viaQuery */ - $viaQuery = $relation->via; - $link = $viaQuery->link; + $link = $relation->via->link; } elseif (is_array($relation->via)) { list($viaName, $viaQuery) = $relation->via; $link = $viaQuery->link; @@ -295,17 +293,7 @@ class SaveRelationsBehavior extends Behavior */ protected function saveRelatedRecords(BaseActiveRecord $model, ModelEvent $event) { - if ( - method_exists($model, 'isTransactional') - && is_null($model->getDb()->transaction) - && ( - ($model->isNewRecord && $model->isTransactional($model::OP_INSERT)) - || (!$model->isNewRecord && $model->isTransactional($model::OP_UPDATE)) - || $model->isTransactional($model::OP_ALL) - ) - ) { - $this->_transaction = $model->getDb()->beginTransaction(); - } + $this->startTransactionForModel($model); try { foreach ($this->_relations as $relationName) { if (array_key_exists($relationName, $this->_oldRelationValue)) { // Relation was not set, do nothing... @@ -636,4 +624,22 @@ class SaveRelationsBehavior extends Behavior $this->validateRelationModel($pettyRelationName, $relationName, $relationModel); } } + + /** + * @param BaseActiveRecord $model + */ + protected function startTransactionForModel(BaseActiveRecord $model) + { + if ( + method_exists($model, 'isTransactional') + && is_null($model->getDb()->transaction) + && ( + ($model->isNewRecord && $model->isTransactional($model::OP_INSERT)) + || (!$model->isNewRecord && $model->isTransactional($model::OP_UPDATE)) + || $model->isTransactional($model::OP_ALL) + ) + ) { + $this->_transaction = $model->getDb()->beginTransaction(); + } + } }