/** * Get base query * @return Builder */ public function query() { $query = new Builder(null); $query->setDI($this->di); $query->from($this->class); $manager = $this->model()->getModelsManager(); /** @var RelationInterface[] $belongsToRelations */ $belongsToRelations = $manager->getBelongsTo($this->model()); if (!empty($belongsToRelations)) { foreach ($belongsToRelations as $belongsToRelation) { $referencedModel = $belongsToRelation->getReferencedModel(); $referencedField = $belongsToRelation->getReferencedFields(); $field = $belongsToRelation->getFields(); $alias = $belongsToRelation->getOptions()['alias']; $query->innerJoin($referencedModel, "{$alias}.{$referencedField} = {$this->class}.{$field}", $alias); } } /** @var RelationInterface[] $hasManyRelations */ $hasManyRelations = $manager->getHasMany($this->model()); if (!empty($hasManyRelations)) { foreach ($hasManyRelations as $hasManyRelation) { $referencedModel = $hasManyRelation->getReferencedModel(); $referencedField = $hasManyRelation->getReferencedFields(); $field = $hasManyRelation->getFields(); $alias = $hasManyRelation->getOptions()['alias']; $query->leftJoin($referencedModel, "{$alias}.{$referencedField} = {$this->class}.{$field}", $alias); $query->groupBy("{$this->class}.id"); } } return $query; }
private function createSearchBuilder() { $builder = new Builder(); $builder->columns(['ping.id', 'ping.batchId', 'ping.proxyId', 'ping.httpCode', 'ping.duration', 'ping.createdAt', 'ping.updatedAt', 'ping.error', 'b.urlId', 'b.name', 'u.address as urlAddress', 'pr.address as proxyAddress']); $builder->addFrom('ping'); $builder->innerJoin('proxy', 'pr.id = ping.proxyId', 'pr'); $builder->innerJoin('batch', 'b.id = ping.batchId', 'b'); $builder->innerJoin('url', 'u.id = b.urlId', 'u'); return $builder; }
private function createSearchBuilder() { $builder = new Builder(); $builder->columns(['ping.id as pingId', 'ping.httpCode', 'ping.duration', 'b.id as batchId', 'b.name', 'c.id as countryId', 'c.code as proxyCountryCode', 'u.id as urlId', 'u.address as urlAddress', 'pr.id as proxyId', 'pr.address as proxyAddress']); $builder->addFrom('ping'); $builder->innerJoin('proxy', 'pr.id = ping.proxyId', 'pr'); $builder->innerJoin('country', 'c.id = pr.countryId', 'c'); $builder->innerJoin('batch', 'b.id = ping.batchId', 'b'); $builder->innerJoin('url', 'u.id = b.urlId', 'u'); return $builder; }