# laravel_curd_support **Repository Path**: cqtlyqs/laravel_curd_support ## Basic Information - **Project Name**: laravel_curd_support - **Description**: 封装公用的curd操作 - **Primary Language**: PHP - **License**: MIT - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 1 - **Forks**: 0 - **Created**: 2022-02-09 - **Last Updated**: 2024-07-19 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README # laravel_curd_support #### 介绍 封装公用的curd操作.
已集成library: 1. prettus/l5-repository 2. league/fractal 3. illuminate/database #### 使用说明 step1: 引入 ``` composer require ktnw/curd_support ``` step2: 发布 ``` php artisan vendor:publish --provider="Prettus\Repository\Providers\RepositoryServiceProvider" ``` step3: 根据实际需求,修改step2中生成的配置文件--repository.php step4: 创建service层接口和实现
service层接口继承: Ktnw\CurdSupport\Services\BaseService
service层实现继承: Ktnw\CurdSupport\Services\Impl\BaseServiceImpl
示例如下: ``` namespace App\Services; use Ktnw\CurdSupport\Services\BaseService; interface UserService extends BaseService { } ``` ``` namespace App\Services\Impl; use App\Services\UserService; use Ktnw\CurdSupport\Services\Impl\BaseServiceImpl; class UserServiceImpl extends BaseServiceImpl implements UserService { public function __construct() { } } ``` 即可调用BaseService中提供的接口方法。
step5: 若需对BaseService和BaseServiceImpl进行扩展,可自行继承后,进行扩展。 #### 详细使用示例 下面示例包含完整的增删查改示例 ``` baseService = $baseService; } /** * 查询用户 * @param Request $request * @param int $userId * @return JsonResponse * @throws Exception */ public function find(Request $request, int $userId): JsonResponse { $user = $this->baseService->findOne($userId, User::class, false); if (!$user) { return ResponseBody::wrong("未查询到用户"); } return ResponseBody::success($user); } /** * 删除用户 * @throws Exception */ public function delete(int $userId): JsonResponse { $r = $this->baseService->delete($userId, User::class, false); return $r ? ResponseBody::success("操作成功") : ResponseBody::wrong("操作失败"); } /** * 保存用户 * @param Request $request * @param UserParam $param * @return JsonResponse * @throws Exception */ public function save(Request $request, UserParam $param): JsonResponse { if ($param->getOpType() == 1) { // 新增 $param->setId(null); } // 加密密码 if (!empty($param->getPassword())) { $param->setPassword(EncryptUtils::hashEncrypt($param->getPassword())); } $r = $this->baseService->saveOrUpdate($param, User::class, new UserSaveWrapper()); return $r ? ResponseBody::success("操作成功") : ResponseBody::wrong("操作失败"); } /** * 查询列表 * @param Request $request * @param UserQuery $userQuery * @return JsonResponse */ public function list(Request $request, UserQuery $userQuery): JsonResponse { $queryWrapper = new UserQueryWrapper(QueryConstants::DB_QUERY, $userQuery, User::class); $wrapperParams = $queryWrapper->initQueryWrapper(); return ResponseBody::success($this->baseService->findList($wrapperParams)); } } ``` ``` findOneByKeys($where, User::class, $isInstance); } } ``` ``` userService = $this->getUserService(); } /** * @throws Exception */ function verify(AbstractBaseParams $params): bool { return $this->check($params); } /** * @return UserService */ private function getUserService(): UserService { return resolve(UserService::class); } /** * @throws Exception */ private function check(UserParam $params): bool { $user = $this->userService->findByUserName($params->getUserName()); if ($user != null && $user["id"] != $params->getId()) { throw new Exception("用户名已存在"); } return true; } } ``` ``` queryType = $queryType; $this->query = $query; } /** * 根据查询类型返回查询时需要的查询条件及参数 * @return QueryWrapperParams */ public function initQueryWrapper(): QueryWrapperParams { return $this->queryType == QueryConstants::DB_MODEL ? $this->initModelQuery() : $this->initSqlQuery(); } /** * ORM查询初始化查询条件及参数 * 查询条件格式和DB::table()需要的一致 */ private function initModelQuery(): QueryWrapperParams { $where = QueryUtils::queryCriteria($this->query, $this->modelClass); $inWhere = []; $notInWhere = []; $orWhere = []; $findColumn = []; $orderBy = []; $params = new QueryWrapperParams($this->queryType); $params->setModelClass($this->modelClass); $params->setPage($this->query->getPage()); $params->setSize($this->query->getSize()); $params->setWhere($where); $params->setInWhere($inWhere); $params->setOrWhere($orWhere); $params->setNotInWhere($notInWhere); $params->setFindColumn($findColumn); $params->setOrderBy($orderBy); $params->setUsePresenter($this->query->getUsePresenter()); return $params; } /** * 原生SQL查询初始化查询条件及参数 */ private function initSqlQuery(): QueryWrapperParams { $totalSql = ""; $sql = "SELECT * FROM users u where 1 "; $p = []; $userName = $this->query->getUserName(); $phone = $this->query->getPhone(); if ($userName) { $sql .= ' AND u.user_name = ? '; $p[] = $userName; } if ($phone) { $sql .= ' AND u.phone = ? '; $p[] = $phone; } $params = new QueryWrapperParams($this->queryType); $params->setPage($this->query->getPage()); $params->setSize($this->query->getSize()); $params->setTotalSql($totalSql); $params->setSql($sql); $params->setParams($p); return $params; } } ``` ``` getKey(); } /** * Return a key value array, containing any custom claims to be added to the JWT. * * @return array */ public function getJWTCustomClaims() { return []; } /** * 重写getAuthPassword * 可根据业务需求设置 * CustomEloquentUserProvider的validateCredentials()会用到 * @return string */ public function getAuthPassword() { return md5($this->getAttributeValue("id") . $this->getAttributeValue("user_name")); } } ``` ``` code = $code; $this->message = $message; $this->data = $data; } public static function success($data = []): JsonResponse { $data = empty($data) ? [] : $data; return (new ResponseBody(ResponseConstant::SUCCESS, 'ok', $data))->out(); } public static function error($code, $msg = ''): JsonResponse { return (new ResponseBody(empty($code) ? ResponseConstant::FAIL : $code, $msg, []))->out(); } public static function wrong($msg = RespCode::OP_FAIL, $code = ''): JsonResponse { return (new ResponseBody(empty($code) ? ResponseConstant::FAIL : $code, $msg, []))->out(); } public static function respCode($resp, $msg = ''): JsonResponse { return (new ResponseBody($resp['code'], empty($msg) ? $resp['message'] : $msg, []))->out(); } public static function output(array $data): JsonResponse { return response()->json($data) ->header('Content-Type', 'text/json') ->setEncodingOptions(JSON_UNESCAPED_UNICODE); } private function out(): JsonResponse { return response()->json($this->object_to_array($this)) ->header('Content-Type', 'text/json') ->setEncodingOptions(JSON_UNESCAPED_UNICODE); } /** * 对象转换数组 * @param $obj * @return array */ private function object_to_array($obj): array { if (!is_array($obj) && !is_object($obj)) { return $obj; } $_arr = is_object($obj) ? get_object_vars($obj) : $obj; $arr = []; foreach ($_arr as $key => $val) { $val = (is_array($val)) || is_object($val) ? $this->object_to_array($val) : $val; $arr[$key] = $val; } return $arr; } } ``` ```