Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- <?php
- namespace App;
- use Illuminate\Database\Eloquent\Model;
- use Illuminate\Database\Eloquent\Relations\BelongsToMany;
- use Illuminate\Database\Eloquent\Relations\HasMany;
- /**
- * Class BaseModel
- * @package App
- */
- abstract class BaseModel extends Model
- {
- /**
- * @param $query
- * @param $relationName
- * @param string $alias
- */
- public function scopeIncludeCount($query, $relationName, $alias = null)
- {
- $alias = $alias ?: $relationName . 'Count';
- $relation = call_user_func([$this, $relationName]);
- /**
- * @var HasMany|BelongsToMany $relation
- */
- $relation->getRelated()->getTable();
- $related = $relation->getRelated();
- if ($relation instanceof HasMany) {
- $relationTable = $related->getTable();
- $query
- ->leftJoin($relationTable, $relation->getForeignKey(), '=', $relation->getQualifiedParentKeyName())
- ->groupBy($this->getTable() . '.' . $this->primaryKey)
- ->addSelect([
- $this->getTable() . '.*',
- \DB::raw(sprintf('COUNT(DISTINCT %s.%s) as %s', $related->getTable(), $related->primaryKey, $alias))]
- );
- } else {
- $relationTable = $relation->getTable();
- $query
- ->leftJoin($relationTable, $relation->getForeignKey(), '=', $relation->getQualifiedParentKeyName())
- ->groupBy($relation->getQualifiedParentKeyName())
- ->addSelect([
- $this->getTable() . '.*',
- \DB::raw(sprintf('COUNT(DISTINCT %s) as %s', $relation->getOtherKey(), $alias))
- ]
- );
- }
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement