diff --git a/src/Database/Models/Organisation.php b/src/Database/Models/Organisation.php index 7b22be0..718dc21 100644 --- a/src/Database/Models/Organisation.php +++ b/src/Database/Models/Organisation.php @@ -253,4 +253,23 @@ class Organisation extends Model implements OrganisationInterface ->where('user_id', $userId); }); } + + /** + * Query scope to get all organisations but indicate which the specified user is a member of. + * + * @param Builder $query + * @param int $userId + * + * @return Builder + */ + public function scopeWithUser($query, $userId) + { + $membersInner = DB::table('organisation_members') + ->selectRaw('organisation_id, 1 AS is_member, flag_admin AS is_admin') + ->where('user_id', $userId); + return $query + ->leftJoinSub($membersInner, 'user_orgs', function ($join) { + $join->on('user_orgs.organisation_id', '=', 'organisations.id'); + }); + } }