connection('mongodb'); } /* ATTRIBUTES */ public function getMsgAttribute($value): string { return utf8_decode($value); } public function setMsgAttribute($value): void { $this->attributes['msg'] = utf8_encode($value); } public function getSubjectAttribute($value): string { return utf8_decode($value); } public function setSubjectAttribute($value): void { $this->attributes['subject'] = utf8_encode($value); } /* METHODS */ public static function countGroupBy(string $field,array $where=[]): Collection { $query = collect(); if (count($where)) { $where_condition = []; foreach ($where as $key => $values) { if (! is_array($values)) throw new \Exception('Where values must be an array.'); $where_condition[$key] = ['$in' => $values]; } $query->push([ '$match' => $where_condition ]); } $query->push([ '$group' => [ '_id' => [$field=>'$'.$field], 'count' => ['$sum' => 1] ] ]); return (new self) ->groupBy($field) ->raw(function($collection) use ($query) { return $collection->aggregate( $query->toArray() ); }); } }