select('activities.*'); $query = $query->leftJoin('users', 'activities.user_id', '=', 'users.id'); return $query; } /** * Add clauses to select the most recent event of each type for each user, to the query. * * @return \Illuminate\Database\Query\Builder */ public function scopeMostRecentEvents($query) { return $query->select('user_id', 'event_type', Capsule::raw('MAX(occurred_at) as occurred_at')) ->groupBy('user_id') ->groupBy('type'); } /** * Add clauses to select the most recent event of a given type for each user, to the query. * * @param string $type The type of event, matching the `event_type` field in the user_event table. * @return \Illuminate\Database\Query\Builder */ public function scopeMostRecentEventsByType($query, $type) { return $query->select('user_id', Capsule::raw('MAX(occurred_at) as occurred_at')) ->where('type', $type) ->groupBy('user_id'); } /** * Get the user associated with this activity. */ public function user() { /** @var UserFrosting\Sprinkle\Core\Util\ClassMapper $classMapper */ $classMapper = static::$ci->classMapper; return $this->belongsTo($classMapper->getClassMapping('user'), 'user_id'); } }