From 2898c3395f3eab4bd89018d83d7f65b907a37293 Mon Sep 17 00:00:00 2001 From: sa0ChunLuyu Date: Sat, 23 Sep 2023 12:28:29 +0800 Subject: [PATCH] =?UTF-8?q?selectRaw=20=E6=8D=A2=E6=88=90=20leftJoin?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- api/app/Http/Controllers/AdminController.php | 68 +++++++++++++++----- 1 file changed, 53 insertions(+), 15 deletions(-) diff --git a/api/app/Http/Controllers/AdminController.php b/api/app/Http/Controllers/AdminController.php index 8bc9c5b..4664b54 100644 --- a/api/app/Http/Controllers/AdminController.php +++ b/api/app/Http/Controllers/AdminController.php @@ -8,7 +8,9 @@ use App\Models\Admin; use App\Models\AdminAccount; use App\Models\AdminToken; use App\Models\Config; +use Illuminate\Database\Query\JoinClause; use Illuminate\Http\Request; +use Illuminate\Support\Facades\DB; use Yo; use Login; use Illuminate\Support\Str; @@ -52,9 +54,21 @@ class AdminController extends Controller $admin_account->secret = bcrypt($request->post('password')); $admin_account->type = 1; $admin_account->save(); - $admin_info = Admin::select(['id', 'nickname', 'avatar', 'status', 'admin_auth_group', 'initial_password']) - ->selectRaw("IFNULL((select account from admin_accounts where admin_accounts.admin = admins.id and type = 1),'') as account") - ->selectRaw("IFNULL((select name from admin_auth_groups where admin_auth_groups.id = admins.admin_auth_group),'') as admin_auth_group_name") + $admin_info = Admin::select([ + DB::raw('admins.id as id'), + DB::raw('admins.nickname as nickname'), + DB::raw('admins.avatar as avatar'), + DB::raw('admins.status as status'), + DB::raw('admins.admin_auth_group as admin_auth_group'), + DB::raw('admins.initial_password as initial_password'), + DB::raw('admin_accounts.account as account'), + DB::raw('admin_auth_groups.name as admin_auth_group_name') + ]) + ->leftJoin('admin_accounts', function (JoinClause $join) { + $join->on('admin_accounts.admin', '=', 'admins.id') + ->where('admin_accounts.type', '=', 1); + }) + ->leftJoin('admin_auth_groups', 'admin_auth_groups.id', '=', 'admins.admin_auth_group') ->where('id', $admin->id)->first(); return Yo::echo([ 'info' => $admin_info @@ -82,10 +96,22 @@ class AdminController extends Controller $admin_account->account = $request->post('account'); $admin_account->save(); } - $admin_info = Admin::select(['id', 'nickname', 'avatar', 'status', 'admin_auth_group', 'initial_password']) - ->selectRaw("IFNULL((select account from admin_accounts where admin_accounts.admin = admins.id and type = 1),'') as account") - ->selectRaw("IFNULL((select name from admin_auth_groups where admin_auth_groups.id = admins.admin_auth_group),'') as admin_auth_group_name") - ->where('id', $admin->id)->first(); + $admin_info = Admin::select([ + DB::raw('admins.id as id'), + DB::raw('admins.nickname as nickname'), + DB::raw('admins.avatar as avatar'), + DB::raw('admins.status as status'), + DB::raw('admins.admin_auth_group as admin_auth_group'), + DB::raw('admins.initial_password as initial_password'), + DB::raw('admin_accounts.account as account'), + DB::raw('admin_auth_groups.name as admin_auth_group_name') + ]) + ->leftJoin('admin_accounts', function (JoinClause $join) { + $join->on('admin_accounts.admin', '=', 'admins.id') + ->where('admin_accounts.type', '=', 1); + }) + ->leftJoin('admin_auth_groups', 'admin_auth_groups.id', '=', 'admins.admin_auth_group') + ->where('admins.id', $admin->id)->first(); return Yo::echo([ 'info' => $admin_info ]); @@ -113,22 +139,34 @@ class AdminController extends Controller $search = $request->post('search'); $admin_auth_group = $request->post('admin_auth_group'); $initial_password = $request->post('initial_password'); - $admin_list = Admin::select(['id', 'nickname', 'avatar', 'status', 'admin_auth_group', 'initial_password']) - ->selectRaw("IFNULL((select account from admin_accounts where admin_accounts.admin = admins.id and type = 1),'') as account") - ->selectRaw("IFNULL((select name from admin_auth_groups where admin_auth_groups.id = admins.admin_auth_group),'') as admin_auth_group_name") + $admin_list = Admin::select([ + DB::raw('admins.id as id'), + DB::raw('admins.nickname as nickname'), + DB::raw('admins.avatar as avatar'), + DB::raw('admins.status as status'), + DB::raw('admins.admin_auth_group as admin_auth_group'), + DB::raw('admins.initial_password as initial_password'), + DB::raw('admin_accounts.account as account'), + DB::raw('admin_auth_groups.name as admin_auth_group_name') + ]) + ->leftJoin('admin_accounts', function (JoinClause $join) { + $join->on('admin_accounts.admin', '=', 'admins.id') + ->where('admin_accounts.type', '=', 1); + }) + ->leftJoin('admin_auth_groups', 'admin_auth_groups.id', '=', 'admins.admin_auth_group') ->where(function ($query) use ($status) { - if ($status != 0) $query->where('status', $status); + if ($status != 0) $query->where('admins.status', $status); }) ->where(function ($query) use ($admin_auth_group) { - if ($admin_auth_group != 0) $query->where('admin_auth_group', $admin_auth_group); + if ($admin_auth_group != 0) $query->where('admins.admin_auth_group', $admin_auth_group); }) ->where(function ($query) use ($initial_password) { - if ($initial_password != 0) $query->where('initial_password', $initial_password); + if ($initial_password != 0) $query->where('admins.initial_password', $initial_password); }) ->where(function ($query) use ($search) { - if ($search != '') $query->where('nickname', 'like', "%$search%"); + if ($search != '') $query->where('admins.nickname', 'like', "%$search%"); }) - ->where('del', 2) + ->where('admins.del', 2) ->paginate(20); return Yo::echo([ 'list' => $admin_list