Advertisement
Guest User

Untitled

a guest
Apr 21st, 2017
85
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 1.70 KB | None | 0 0
  1. <?php
  2.  
  3. namespace App;
  4.  
  5. use Illuminate\Database\Eloquent\Model;
  6. use Illuminate\Database\Eloquent\Relations\BelongsToMany;
  7. use Illuminate\Database\Eloquent\Relations\HasMany;
  8.  
  9. /**
  10. * Class BaseModel
  11. * @package App
  12. */
  13. abstract class BaseModel extends Model
  14. {
  15. /**
  16. * @param $query
  17. * @param $relationName
  18. * @param string $alias
  19. */
  20. public function scopeIncludeCount($query, $relationName, $alias = null)
  21. {
  22. $alias = $alias ?: $relationName . 'Count';
  23.  
  24. $relation = call_user_func([$this, $relationName]);
  25.  
  26. /**
  27. * @var HasMany|BelongsToMany $relation
  28. */
  29. $relation->getRelated()->getTable();
  30. $related = $relation->getRelated();
  31.  
  32. if ($relation instanceof HasMany) {
  33. $relationTable = $related->getTable();
  34. $query
  35. ->leftJoin($relationTable, $relation->getForeignKey(), '=', $relation->getQualifiedParentKeyName())
  36. ->groupBy($this->getTable() . '.' . $this->primaryKey)
  37. ->addSelect([
  38. $this->getTable() . '.*',
  39. \DB::raw(sprintf('COUNT(DISTINCT %s.%s) as %s', $related->getTable(), $related->primaryKey, $alias))]
  40. );
  41. } else {
  42. $relationTable = $relation->getTable();
  43. $query
  44. ->leftJoin($relationTable, $relation->getForeignKey(), '=', $relation->getQualifiedParentKeyName())
  45. ->groupBy($relation->getQualifiedParentKeyName())
  46. ->addSelect([
  47. $this->getTable() . '.*',
  48. \DB::raw(sprintf('COUNT(DISTINCT %s) as %s', $relation->getOtherKey(), $alias))
  49. ]
  50. );
  51. }
  52.  
  53. }
  54. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement