services层属于dao层之下,最接近控制器层的。所有的业务逻辑都可以写在services层中。在析构函数中,注入对应的dao层来操作数据库。
services内置方法
获取当前分页页码和展示条数,会根据系统配置返回不大于配置的展示条数
public function getPageValue(bool $isPage = true, bool $isRelieve = true)
数据库事务操作
public function transaction(callable $closure, bool $isTran = true)
创建token
public function createToken(int $id, $type)
获取路由地址
public function url(string $path, array $params = [], bool $suffix = false, bool $isDomain = false)
密码hash加密
public function passwordHash(string $password)
创建一个UserServices
,引入刚才上一章创建的UserDao
namespase app\services;
user app\services\BaseServices;
use app\dao\UserDao;
class UserServices extends BaseServices
{
public function __construct(UserDao $dao)
{
$this->dao = $dao;
}
}
引入后,就可以在UserServices中写自己的逻辑
ServicesTrait
继承方法
ServicesTrait
主要用来辅助IDE来,提示函数操作,在其他地方实例化services可以直接调用到dao层的方法。
namespase app\services;
user app\services\BaseServices;
use app\dao\UserDao;
use crmeb\traits\ServicesTrait;
class UserServices extends BaseServices
{
use ServicesTrait;
public function __construct(UserDao $dao)
{
$this->dao = $dao;
}
}
查询用户uid=1的用户
get
方法属于dao
层中基类中的
use app\services\UserServices;
/** @var UserServices $service */
$service = app()->make(UserServices::class);
$res = $service->get(1);
var_dump($res->toArray());
使用了UserServices不知道当前的service操作的是哪个模型
UserServices
前面的user就是相关的模型信息
起service类名的时候一定要和相关的模型名称保持一致,这样才能一眼就能看出操作的数据库是哪一个。
Was this helpful?
0 / 0