/** * Creates data provider instance with search query applied * * @param array $params * * @return ActiveDataProvider */ public function search($params) { $query = Scorecard::find(); $dataProvider = new ActiveDataProvider(['query' => $query]); if (!($this->load($params) && $this->validate())) { return $dataProvider; } $query->andFilterWhere(['id' => $this->id, 'competition_id' => $this->competition_id, 'golfer_id' => $this->golfer_id, 'tees' => $this->tees]); $query->andFilterWhere(['like', 'note', $this->note]); return $dataProvider; }
public function apply($competition) { $params = $this->getParameters(); $this->bestOf = isset($params['bestOf']) ? intval($params['bestOf']) : null; $children_competitions = $competition->getCompetitions()->andWhere(['status' => Competition::STATUS_CLOSED])->select('id'); Yii::trace('children comp=' . print_r($children_competitions->asArray()->all(), true)); foreach ($competition->getScorecards()->andWhere(['status' => Scorecard::STATUS_OPEN])->each() as $scorecard) { Yii::trace('scorecard=' . $scorecard->id); $registrations = Registration::find()->andWhere(['competition_id' => $children_competitions])->andWhere(['golfer_id' => $scorecard->registration->golfer_id]); $children_scorecards = Scorecard::find()->andWhere(['registration_id' => $registrations->select('id')])->andWhere(['status' => Scorecard::STATUS_RETURNED]); if (intval($this->bestOf) > 0) { $children_scorecards->orderBy([$this->source_type => $this->source_direction])->limit($this->bestOf); } $count_children = clone $children_scorecards; $sum_children = $children_scorecards->sum($this->source_type); $scorecard->{$this->destination_type} = $sum_children; $scorecard->rounds = $count_children->count(); $scorecard->save(); } Yii::trace('bestOf=' . $this->bestOf); }