есть контролер
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');