Как правильно организовать сохранение?

есть контролер
public function actionSaveSend
 $user=Yii::$app->user->identity;
        $order=Order::findOne(['id'=>$post['id'],'user_id'=>$user->id]);
        if(!empty($order)){
            $bonus=$this->getPrioritiBonus();
            $paysum=round($this->getBonusSum($bonus),5);
            $bonusRu=$this->getBonusRu($order,$bonus);
            $order->points_bonus=$paysum;
            $order->bonus=$bonusRu;
            $order->save();
            $client = new Client();
            $body=json_encode([
                "ref"=>$user->code,
                "key" => Yii::$app->params['pvk'],
                'sum'=>$paysum,
                'order'=>$order->id]);
            $response = $client->post(\Yii::$app->params['url'],$body, Yii::$app->params['headers'])->send();
            if (!$response->isOk)
                Yii::$app->session->setFlash('error',$response->data['message']);
         }

что мне надо 1 мне надо провести что то вроде транзакции но следуюшим образом сохраняется модель ордерс после этого идет отправка если отправка возвращает isOk то все заканчивается редиректом. А вот если не все хорошо надо вывести ошибку и откатить сохранения в базу . Вот только как это сделать. Я так понимаю использовать Yii::$app->db->beginTransaction() но вот как ?
Уточняю вопрос вот так код отработает как транзакция
$transaction=Yii::$app->db->beginTransaction();
            if($order->save()){
                $client = new Client();
                $body=json_encode([
                    "ref"=>$user->affliliateProgramCode->code,
                    "key" => Yii::$app->params['pvk'],
                    'sum'=>$paysum,
                    'orderNumber'=>$order->id]);
                $response = $client->post(\Yii::$app->params['url'],$body, Yii::$app->params['headers'])->send();
                if (!$response->isOk){
                    Yii::$app->session->setFlash('error',$response->data['message']);
                    $transaction->rollBack();
                    return false;
                }
            }
            $transaction->commit();
            return $this->redirect('/cabinet');
  • Вопрос задан
  • 136 просмотров
Решения вопроса 1
slo_nik
@slo_nik Куратор тега Yii
Доброй ночи.
Вот
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы