Exemplo n.º 1
0
 /**
  * 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;
 }