groupBy("type"); return $r; } public function bannerPaginate($params) { $p = Setting::query()->where("type", Setting::TYPE_BANNER)->when($params['status'], function (Builder $query) use ($params) { return $query->where("status", $params['status']); })->when($params['name'], function (Builder $query) use ($params) { return $query->where("key", $params['name']); })->orderByDesc("id")->paginate($params['page_size']); return [ "total" => $p->total(), "page_total" => $p->lastPage(), "list" => array_map(function (Setting $u) { return array_merge([ "id" => $u->id, "name" => $u->key, "created_at" => $u->created_at->format("Y-m-d H:i:s"), ], json_decode($u->value, true)); }, $p->items()), ]; } public function store($params) { $id = $params['id']; if ($id) { $m = Setting::find($id); } else { $m = new Setting(); } $m->type = Setting::TYPE_BANNER; $m->key = Arr::get($params, "name"); $m->value = json_encode([ "sort" => $params['sort'] ?? 0, "imageUrl" => $params['imageUrl'], "is_use" => $params['is_use'] ?? 1, ]); $m->save(); return true; } }