From c3e7c24e6d34fe9d090ac64d04fcac079578341c Mon Sep 17 00:00:00 2001 From: Craig Williams Date: Thu, 10 Feb 2022 17:18:06 +0000 Subject: [PATCH] Add a scope to the organisation model to include if the currentUser is a member or admin of which organisations (null indicates not a member nor an admin) --- src/Database/Models/Organisation.php | 19 +++++++++++++++++++ 1 file changed, 19 insertions(+) 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'); + }); + } }