/** * Add the constraints for a relationship query. * * @param \Illuminate\Database\Eloquent\Builder $query * @param \Illuminate\Database\Eloquent\Builder $parent * @param array|mixed $columns * @return \Illuminate\Database\Eloquent\Builder */ public function getRelationQuery(Builder $query, Builder $parent, $columns = ['*']) { if ($parent->getQuery()->from == $query->getQuery()->from) { return $this->getRelationQueryForSelfRelation($query, $parent, $columns); } return parent::getRelationQuery($query, $parent, $columns); }
/** * Add the constraints for a relationship query on the same table. * * @param \Illuminate\Database\Eloquent\Builder $query * @param \Illuminate\Database\Eloquent\Builder $parent * @param array|mixed $columns * @return \Illuminate\Database\Eloquent\Builder */ public function getRelationQueryForSelfJoin(Builder $query, Builder $parent, $columns = ['*']) { $query->select($columns); $query->from($this->related->getTable() . ' as ' . ($hash = $this->getRelationCountHash())); $this->related->setTable($hash); $this->setJoin($query); return parent::getRelationQuery($query, $parent, $columns); }