From 2286084fe30090eaff39114ba0281f4c55e31d43 Mon Sep 17 00:00:00 2001 From: Mitsuru Mutaguchi Date: Mon, 21 Apr 2025 16:35:57 +0900 Subject: [PATCH 1/3] =?UTF-8?q?change:=20=E3=83=9A=E3=83=BC=E3=82=B8?= =?UTF-8?q?=E7=AE=A1=E7=90=86,=20=E3=83=9A=E3=83=BC=E3=82=B8=E6=A8=A9?= =?UTF-8?q?=E9=99=90=E4=B8=80=E8=A6=A7,=20=E3=83=9A=E3=83=BC=E3=82=B8?= =?UTF-8?q?=E6=A8=A9=E9=99=90=E8=A8=AD=E5=AE=9A=E3=82=92=E6=95=B0=E4=B8=87?= =?UTF-8?q?=E3=83=A6=E3=83=BC=E3=82=B6=E3=81=A7=E3=82=82=E3=83=9A=E3=83=BC?= =?UTF-8?q?=E3=82=B8=E9=96=8B=E3=81=91=E3=82=8B=E3=82=88=E3=81=86=E3=81=AB?= =?UTF-8?q?=E5=AF=BE=E5=BF=9C?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- app/Plugins/Manage/PageManage/PageManage.php | 37 ++++++++++++++----- .../views/plugins/manage/page/role.blade.php | 14 ++++++- .../plugins/manage/page/role_list.blade.php | 17 ++++++++- 3 files changed, 56 insertions(+), 12 deletions(-) diff --git a/app/Plugins/Manage/PageManage/PageManage.php b/app/Plugins/Manage/PageManage/PageManage.php index fdad5c7c9..596f96ce0 100644 --- a/app/Plugins/Manage/PageManage/PageManage.php +++ b/app/Plugins/Manage/PageManage/PageManage.php @@ -750,13 +750,22 @@ public function role($request, $page_id, $group_id) ->orderBy('group_id', 'asc') ->get(); + // 数万ユーザでメモリ不足になるため、GROUP_CONCAT()を使用して、グループ参加者のユーザ名を取得 + // GROUP_CONCAT()はmysql設定でgroup_concat_max_len(default=1024)の制限があり、それ以上の長さの文字列は消える。 + $group_users = User::select( + 'group_users.group_id', + DB::raw("GROUP_CONCAT(users.name SEPARATOR ',') as group_user_names"), + DB::raw('count(group_users.group_id) as user_count') + ) + ->join('group_users', 'group_users.user_id', '=', 'users.id') + ->where('group_users.deleted_at', null) + ->groupBy('group_users.group_id') + ->get(); + foreach ($groups as $group) { $group->page_roles = $page_roles->where('group_id', $group->id); - - // 数万ユーザでメモリ不足になるため、DB呼び出し - $group->group_user_names = User::whereIn('id', GroupUser::where('group_id', $group->id)->pluck('user_id')) - ->pluck('name') - ->implode(', '); + $group->group_user_names = $group_users->firstWhere('group_id', $group->id)->group_user_names; + $group->group_user_count = $group_users->firstWhere('group_id', $group->id)->user_count; } // 自分のページから親を遡って取得 @@ -1054,11 +1063,21 @@ public function roleList($request, $id) // ※ with('group_user')は、数万ユーザの場合、1Gでもメモリ不足になる。 $groups = Group::orderBy('display_sequence', 'asc')->get(); + // 数万ユーザでメモリ不足になるため、GROUP_CONCAT()を使用して、グループ参加者のユーザ名を取得 + // GROUP_CONCAT()はmysql設定でgroup_concat_max_len(default=1024)の制限があり、それ以上の長さの文字列は消える。 + $group_users = User::select( + 'group_users.group_id', + DB::raw("GROUP_CONCAT(users.name SEPARATOR '
') as group_user_names"), + DB::raw('count(group_users.group_id) as user_count') + ) + ->join('group_users', 'group_users.user_id', '=', 'users.id') + ->where('group_users.deleted_at', null) + ->groupBy('group_users.group_id') + ->get(); + foreach ($groups as $group) { - // 数万ユーザでメモリ不足になるため、DB呼び出し - $group->group_user_names = User::whereIn('id', GroupUser::where('group_id', $group->id)->pluck('user_id')) - ->pluck('name') - ->implode('
'); + $group->group_user_names = $group_users->firstWhere('group_id', $group->id)->group_user_names; + $group->group_user_count = $group_users->firstWhere('group_id', $group->id)->user_count; } // 管理画面プラグインの戻り値の返し方 diff --git a/resources/views/plugins/manage/page/role.blade.php b/resources/views/plugins/manage/page/role.blade.php index cac6e2ed3..ba834ebe2 100644 --- a/resources/views/plugins/manage/page/role.blade.php +++ b/resources/views/plugins/manage/page/role.blade.php @@ -111,7 +111,7 @@
- 参加ユーザ :{{$group->group_user_names}} + 参加ユーザ {{$group->group_user_count}}人 {{$group->group_user_names}}
@@ -149,4 +149,16 @@ + + @endsection diff --git a/resources/views/plugins/manage/page/role_list.blade.php b/resources/views/plugins/manage/page/role_list.blade.php index db54d22c9..2fe3cdd24 100644 --- a/resources/views/plugins/manage/page/role_list.blade.php +++ b/resources/views/plugins/manage/page/role_list.blade.php @@ -166,13 +166,13 @@ グループ名 @foreach($groups as $group) - {{$group->name}} + {{$group->name}} {{$group->group_user_count}}人 @endforeach 参加ユーザ @foreach($groups as $group) - {!!$group->group_user_names!!} + {!!$group->group_user_names!!} @endforeach @@ -181,4 +181,17 @@ ※ 横スクロールできます。 @endif + + + @endsection From 84aab653ae3a31e0ce70ee8dc1418bcc32ff7f00 Mon Sep 17 00:00:00 2001 From: Mitsuru Mutaguchi Date: Mon, 21 Apr 2025 16:43:50 +0900 Subject: [PATCH 2/3] phpcs fix --- app/Plugins/Manage/PageManage/PageManage.php | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/app/Plugins/Manage/PageManage/PageManage.php b/app/Plugins/Manage/PageManage/PageManage.php index 596f96ce0..11e6be5f1 100644 --- a/app/Plugins/Manage/PageManage/PageManage.php +++ b/app/Plugins/Manage/PageManage/PageManage.php @@ -752,7 +752,8 @@ public function role($request, $page_id, $group_id) // 数万ユーザでメモリ不足になるため、GROUP_CONCAT()を使用して、グループ参加者のユーザ名を取得 // GROUP_CONCAT()はmysql設定でgroup_concat_max_len(default=1024)の制限があり、それ以上の長さの文字列は消える。 - $group_users = User::select( + $group_users = User:: + select( 'group_users.group_id', DB::raw("GROUP_CONCAT(users.name SEPARATOR ',') as group_user_names"), DB::raw('count(group_users.group_id) as user_count') @@ -1065,7 +1066,8 @@ public function roleList($request, $id) // 数万ユーザでメモリ不足になるため、GROUP_CONCAT()を使用して、グループ参加者のユーザ名を取得 // GROUP_CONCAT()はmysql設定でgroup_concat_max_len(default=1024)の制限があり、それ以上の長さの文字列は消える。 - $group_users = User::select( + $group_users = User:: + select( 'group_users.group_id', DB::raw("GROUP_CONCAT(users.name SEPARATOR '
') as group_user_names"), DB::raw('count(group_users.group_id) as user_count') From 84a54b16c6169bd71a5e8d130a8fbe8a115f30a2 Mon Sep 17 00:00:00 2001 From: Mitsuru Mutaguchi Date: Mon, 21 Apr 2025 16:54:30 +0900 Subject: [PATCH 3/3] =?UTF-8?q?bugfix:=20=E3=83=9A=E3=83=BC=E3=82=B8?= =?UTF-8?q?=E7=AE=A1=E7=90=86,=20=E3=83=9A=E3=83=BC=E3=82=B8=E6=A8=A9?= =?UTF-8?q?=E9=99=90=E4=B8=80=E8=A6=A7,=20=E3=83=9A=E3=83=BC=E3=82=B8?= =?UTF-8?q?=E6=A8=A9=E9=99=90=E8=A8=AD=E5=AE=9A=E3=81=A7=E3=82=B0=E3=83=AB?= =?UTF-8?q?=E3=83=BC=E3=83=97=E5=8F=82=E5=8A=A0=E8=80=850=E4=BA=BA?= =?UTF-8?q?=E8=A1=A8=E7=A4=BA=E5=AF=BE=E5=BF=9C?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- app/Plugins/Manage/PageManage/PageManage.php | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/app/Plugins/Manage/PageManage/PageManage.php b/app/Plugins/Manage/PageManage/PageManage.php index 11e6be5f1..447347f66 100644 --- a/app/Plugins/Manage/PageManage/PageManage.php +++ b/app/Plugins/Manage/PageManage/PageManage.php @@ -765,8 +765,8 @@ public function role($request, $page_id, $group_id) foreach ($groups as $group) { $group->page_roles = $page_roles->where('group_id', $group->id); - $group->group_user_names = $group_users->firstWhere('group_id', $group->id)->group_user_names; - $group->group_user_count = $group_users->firstWhere('group_id', $group->id)->user_count; + $group->group_user_names = optional($group_users->firstWhere('group_id', $group->id))->group_user_names; + $group->group_user_count = optional($group_users->firstWhere('group_id', $group->id))->user_count ?? 0; } // 自分のページから親を遡って取得 @@ -1078,8 +1078,8 @@ public function roleList($request, $id) ->get(); foreach ($groups as $group) { - $group->group_user_names = $group_users->firstWhere('group_id', $group->id)->group_user_names; - $group->group_user_count = $group_users->firstWhere('group_id', $group->id)->user_count; + $group->group_user_names = optional($group_users->firstWhere('group_id', $group->id))->group_user_names; + $group->group_user_count = optional($group_users->firstWhere('group_id', $group->id))->user_count ?? 0; } // 管理画面プラグインの戻り値の返し方