crmeb多商户二开接口流程文档Repository【4】

Repository

  • 定义

目录

 
  1. \app\common\repository

具体repository下在分块,可以根据不同功能划分;默认这里创建的services所有应用都可以使用,如果不同应用想单独创建repository,请在应用目录下创建repository目录,再具体实现不同repository类

repository是具体实现某个特定功能,比如用户的列表查看搜索、用户注册、登录等等都是具体功能

 
  1. repository<->dao<->model<->table

和UserDao对应UserRepository,只需要在构造方法中注入UserDao就可以

 
  1. namespace app\common\repositories\user;
  2. use app\common\dao\user\UserDao;
  3. class UserRepository extends BaseRepository
  4. {
  5. protected $dao;
  6. public function __construct(UserDao $dao)
  7. {
  8. $this->dao = $dao;
  9. }
  10. public function getList(array $where, int $page, int $limit)
  11. {
  12. $query = $this->dao->search($where);
  13. $list = $query->page($page,$limit)->select();
  14. $count =$query->count();
  15. return compact('count','list');
  16. }
  17. }

每一个小的功能都可以定义为一个实现方法,比如:设置默认地址

 
  1. /**
  2. * 设置默认定制
  3. * @param int $uid
  4. * @param int $id
  5. * @return bool
  6. */
  7. public function setDefault(int $uid, int $id)
  8. {
  9. if (!$this->getAddress($id)) {
  10. return false; //'地址不存在';
  11. }
  12. if (!$this->dao->update($uid, ['is_default' => 0], 'uid'))
  13. return false; //'取消原来默认地址';
  14. if (!$this->dao->update($id, ['is_default' => 1]))
  15. return false; //'设置默认地址失败';
  16. return true;
  17. }

如果添加一个的地址,并选择了默认地址选项,则在添加的地址方法中调用setDefault方法

 
  1. public function add($uid,$data)
  2. {
  3. $data['uid] = $uid;
  4. $res = $this->dao->save($data);
  5. if(!$res)
  6. return false;
  7. if($data['is_default] == 1){
  8. $this->setDefault($uid,$res['id]);
  9. }
  10. return true;
  11. }

可以按照需要把不同功能点拆分为每一个方法,以实现代码的最大复用,不用重复造轮子

  • 使用

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

 
  1. public function lst($cid)
  2. {
  3. [$page, $limit] = $this->getPage();
  4. $where = $this->request->params(['id']);
  5. $data = $this->repository->getList($where, $page, $limit);
  6. return app('json')->success($data);
  7. }

}

 
  1. 使用UserRepository具体方法可以使用`$this->repository`

$this->repository->search();

 
  1. ### 控制器中方法注入
  2. 某个特定方法注入某个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()使用:

 
  1. /** @var UserReposotiroy $user */
  2. $user = app()->make(UserReposotiroy::class);
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

crmeb专业二开

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值