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