# Repository
* ## 定义
### 目录
```
\app\common\repository
```
>具体repository下在分块,可以根据不同功能划分;默认这里创建的services所有应用都可以使用,如果不同应用想单独创建repository,请在应用目录下创建repository目录,再具体实现不同repository类
repository是具体实现某个特定功能,比如用户的列表查看搜索、用户注册、登录等等都是具体功能
```
repository<->dao<->model<->table
```
和UserDao对应UserRepository,只需要在构造方法中注入UserDao就可以
```
namespace app\common\repositories\user;
use app\common\dao\user\UserDao;
class UserRepository extends BaseRepository
{
protected $dao;
public function __construct(UserDao $dao)
{
$this->dao = $dao;
}
public function getList(array $where, int $page, int $limit)
{
$query = $this->dao->search($where);
$list = $query->page($page,$limit)->select();
$count =$query->count();
return compact('count','list');
}
}
```
每一个小的功能都可以定义为一个实现方法,比如:设置默认地址
```
/**
* 设置默认定制
* @param int $uid
* @param int $id
* @return bool
*/
public function setDefault(int $uid, int $id)
{
if (!$this->getAddress($id)) {
return false; //'地址不存在';
}
if (!$this->dao->update($uid, ['is_default' => 0], 'uid'))
return false; //'取消原来默认地址';
if (!$this->dao->update($id, ['is_default' => 1]))
return false; //'设置默认地址失败';
return true;
}
```
如果添加一个的地址,并选择了默认地址选项,则在添加的地址方法中调用`setDefault`方法
```
public function add($uid,$data)
{
$data['uid] = $uid;
$res = $this->dao->save($data);
if(!$res)
return false;
if($data['is_default] == 1){
$this->setDefault($uid,$res['id]);
}
return true;
}
```
>可以按照需要把不同功能点拆分为每一个方法,以实现代码的最大复用,不用重复造轮子
* ## 使用
repository可以在控制器中,也可以不同repository之间互相调用(实现某一个复杂功能逻辑)
### 控制器中使用
也是在构造方法中注入当前repository,比如UserControlle注入 UserRepository
```
namespace app\controller;
use app\Request;
use app\common\repositories\user\UserRepository;
class User
{
protected $repository;
public function __construct(App $app, repository $repository)
{
parent::__construct($app);
$this->repository = $repository;
}
public function lst($cid)
{
[$page, $limit] = $this->getPage();
$where = $this->request->params(['id']);
$data = $this->repository->getList($where, $page, $limit);
return app('json')->success($data);
}
}
```
使用UserRepository具体方法可以使用`$this->repository`
```
$this->repository->search();
```
### 控制器中方法注入
某个特定方法注入某个repository
```
/**
* 记录用户分享
* @param Request $request
* @return mixed
*/
public function user_share(Request $request, UserBillRepository $services)
{
$uid = (int)$request->uid();
return app('json')->successful($services->setUserShare($uid));
}
```
UserBillServices用来记录每一次分享
### 不同services之间互相调用
首先引入需要使用的repository
>使用`app()->make()`来创建repository类的实例
`app()->make()`使用:
```
/** @var UserReposotiroy $user */
$user = app()->make(UserReposotiroy::class);
```
- 序言
- 系统简介
- 系统介绍
- 前端脑图
- 项目介绍
- 新手入门(源码安装)
- 运行环境
- 服务器配置及安装
- 视频安装教程
- 服务器及环境搭建
- 服务器购买
- 域名购买
- 域名解析
- 服务器配置
- 宝塔配置
- 创建站点
- 安装项目
- 1.源码上传(必看内容)
- 2.PHP扩展安装
- 3.环境配置
- 4.运行服务
- 5.一键安装
- 注意事项(很重要)
- 重启swoole服务
- linux安装swoole方法
- 特别注意事项
- mysql 5.7注意事项
- https域名
- ssl证书申请
- 公众号配置
- 公众号配置
- 公众号开发配置
- 公众号菜单
- 设置公众号菜单
- 关键字
- 跳转网页
- 跳转小程序
- 小程序配置
- 1.微信平台配置
- 2.CRMEB后台配置
- 3.前端提交审核
- 4.确认发布
- 支付配置
- 支付配置
- 公众号支付
- 小程序支付
- 支付宝支付
- 其他配置
- 公众号模板消息
- 小程序订阅消息
- 商业授权
- 授权说明
- 申请授权
- 安装常见问题汇总
- 请修改sql_mode文件为NO_AUTO提示
- 版本更新
- 客服设置
- uni-app 打包H5、公众号
- 版本更新
- 清空数据
- 测试域名
- 部署多套多商户
- 使用说明
- 商品分类
- 分类说明
- 分类管理
- 品牌分类
- 商品标签
- 商品管理
- 发布商品
- 商品规格
- 配置说明
- 文件上传
- 移动端展示说明
- 首页
- 分类页
- 个人中心
- 热门搜索
- 分销规则
- 分销配置
- 分销员管理
- 分销规则说明
- 分销员等级
- 分销礼包
- 佣金说明
- 用户管理
- 商户用户管理
- 平台用户管理
- 用户协议
- 用户搜索记录
- 秒杀
- 秒杀规则
- 开启秒杀活动
- 直播
- 主播实名认证
- 开启直播
- 添加直播商品
- 预售
- 开启全款预售
- 开启定金预售
- 预售协议
- 专题
- 后台配置
- 前端展示
- 助力
- 开启助力
- 查看助力活动
- 拼团
- 虚拟拼团设置
- 开启拼团
- 查看拼团活动
- 积分
- 积分设置
- 积分来源
- 积分使用
- 提现
- 提现规则
- 提现步骤
- 新闻资讯
- 新闻页面
- 发布资讯
- 账户管理
- 账号信息
- 账户资金
- 优惠券
- 添加优惠券
- 发布优惠券
- 领取及使用
- 发放优惠券
- 订单管理
- 后台订单处理
- 前端订单处理
- 订单退款
- 订单打印
- 客服管理
- 添加客服
- 客服权限
- 门店自提
- 开启门店自提
- 设置核销权限
- 订单核销说明
- 商户管理
- 商户分类
- 商户入驻
- 商户列表
- 商户菜单管理
- 店铺类型
- 财务
- 财务对账
- 发票管理
- 自动分账(v1.5及以后版本)
- 邮费说明
- 运费设置
- 运费组成
- 运费模板
- 物流配置
- 公告管理
- 店铺相关
- 店铺定位设置
- 店铺街入口
- 店铺活动
- 店铺基本信息设置
- 小票打印
- 小票打印机配置
- 小票打印机设置
- 技术文档
- 开发规范
- 数据字典
- 目录结构
- 移动端路由
- 系统配置
- 后台表单说明
- 短信设置
- 短信账户
- 短信配置
- 短信模板
- 一号通
- 电子面单
- 短信提醒
- 商品采集
- 物流查询
- 付费采集商品配置
- PC端展示说明
- PC端开启
- PC端平台页面配置
- PC端店铺页面配置
- 保障服务
- 移动端商品管理
- 开启移动端商品管理
- 功能说明
- 会员管理
- 会员管理
- 会员权益
- 会员配置
- 社区功能
- 社区分类
- 社区话题
- 社区文章
- 社区评论
- 社区配置
- 通知管理
- 移动前端
- 目录结构
- 配置说明
- 页面路径
- 后台前端说明
- 总后台目录结构
- 商户后台目录结构
- 开发和构建
- APP 打包
- 基础配置
- 开发调试
- 打包上线
- App打包
- PC端说明
- 安装教程
- 目录结构
- 打包教程
- 常见问题
- 服务器问题
- 服务器环境说明
- MySQL 5.7注意事项
- PHP fileinfo扩展安装
- 后台登录页幻灯片
- 后台登录页logo
- 论坛常见问题汇总
- 个人中心菜单加链接
- 子账号登录名
- 前后端分离配置
- 重启swoole进程
- 开论坛勋章
- 源码下载地址
- 查看/隐藏版本号
- 搜索商品后服务挂了
- 开发文档
- 架构
- config配置文件
- 容器和依赖注入
- 异常处理
- 路由
- 控制器模块
- 日志处理
- 自定义指令
- CRMEB类库
- Basic基类
- Exceptions异常处理
- Interfaces接口类
- Jobs消息队列
- services服务类
- traits
- listens定时监听类
- 接口流程
- Controller
- Repository
- Dao
- Model
- 流程
- 订单流程
- 下单流程
- 退款流程
- 二开教程
- 定义新的接口
- 创建新的页面
- 创建新的组合数据
- 更换短信模板