Repository
-
定义
目录
\app\common\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()使用:
/** @var UserReposotiroy $user */$user = app()->make(UserReposotiroy::class);










