get(SingleSegmentLoader::class); } $this->dynamicSegmentsLoader = $dynamicSegmentsLoader; } public function reset() { parent::reset(); $this->segmentIndex = 0; } protected function filter($subscribers) { $segmentId = $this->segmentsIds[$this->segmentIndex]; $filters = $this->dynamicSegmentsLoader->load($segmentId)->getFilters(); if (!is_array($filters) || empty($filters)) { return []; } $segment = Segment::findOne($segmentId); if (!$segment instanceof Segment) { return []; } $name = $segment->name; foreach ($filters as $filter) { $subscribers = $filter->toSql($subscribers); } return $subscribers ->selectMany([ 'list_status' => Subscriber::$_table . '.status', ]) ->selectExpr("'" . $name . "' AS segment_name") ->offset($this->offset) ->limit($this->batchSize) ->findArray(); } public function get() { if ($this->segmentIndex >= count($this->segmentsIds)) { $this->finished = true; } $subscribers = parent::get(); if ($subscribers !== false && count($subscribers) < $this->batchSize) { $this->segmentIndex ++; $this->offset = 0; $this->finished = false; } return $subscribers; } }