# 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;
}
}
```
```