/** * @return \yii\db\ActiveQuery */ public function getDraftHeroes() { return $this->hasMany(DotaDraftHero::className(), ['draft_id' => 'id']); }
/** * добавляет в базу новую ставку * * @param $fantasy * @return bool */ public function addRate($fantasy) { $draftModel = new DotaDraft(); $draftModel->attributes = $this->attributes; if ($draftModel->save() === false) { return false; } //echo'<pre>'; print_r($draftModel);echo'</pre>';die; switch ($this->scenario) { case self::SCENARIO_MIXED_DRAFT: $DotaDraftPlayer = new DotaDraftPlayer(); $DotaDraftHero = new DotaDraftHero(); $DotaDraftPlayer->addPlayersRows($this->players, $draftModel->id, $this->draft_slots); $DotaDraftHero->addHeroesRows($this->heroes, $draftModel->id); break; case self::SCENARIO_PLAYERS_DRAFT: $DotaDraftPlayer = new DotaDraftPlayer(); $DotaDraftPlayer->addPlayersRows($this->players, $draftModel->id, $this->draft_slots); break; case self::SCENARIO_HEROES_DRAFT: $DotaDraftHero = new DotaDraftHero(); $DotaDraftHero->addHeroesRows($this->heroes, $draftModel->id); break; } //снимаем взнос+комиссия у игрока $user = User::findOne(Yii::$app->user->id); $deposit_before = $user->deposit; $user->deposit = $user->deposit - $fantasy->deposit - $fantasy->fee; if ($user->save() === false) { $draftModel->delete(); //если возникла ошибка - удаляем из базы ставку пользователя return false; } //заносим в лог $data = ['fantasy_id' => $fantasy->id, 'game' => Transaction::TR_GAME_DOTA]; $trans_descr = Transaction::buildTransactionDescrForSave(Transaction::TR_TYPE_FANTASY_PAYMENT, $data); Transaction::saveTransaction($user->id, $deposit_before, -($fantasy->deposit + $fantasy->fee), $trans_descr); //если нужно - увеличиваем призовой фонд $total_sum_rates = $draftModel->getCountFantasyDrafts($fantasy->id) * $fantasy->deposit; if ($total_sum_rates > $fantasy->prize_pool_real) { DotaFantasy::upateRealPrizePool($fantasy->id, $total_sum_rates); } return true; }
/** * считает кол-во очков по смешанному драфту * @param $fantasy array * @param $rates array */ private static function calculateScoresInMixedDraft($fantasy, $rates) { $draft_ids = $draft_info = []; $DotaDraft = new DotaDraft(); foreach ($rates as $rate) { $draft_ids[] = $rate['draft_id']; } $draft_info_heroes = DotaDraftHero::getDraftsInfo($draft_ids); $draft_info_players = DotaDraftPlayer::getDraftsInfo($draft_ids); //echo'<pre>';print_r($draft_info_heroes);echo'</pre>';//die; //echo'<pre>';print_r($draft_info_players);echo'</pre>';//die; foreach ($draft_info_heroes as $key => $row) { $draft_info[$key]['heroes'] = $row; } foreach ($draft_info_players as $key => $row) { $draft_info[$key]['players'] = $row; } //echo'<pre>';print_r($draft_info);echo'</pre>';die; foreach ($draft_info as $draft_id => $row) { $DotaDraft->setScoresForMixedDraft($draft_id, $fantasy['event_id'], $row); } //die; }