模型数据

用户可以在/app/model/下自定义model数据类,通过App::$model获取,例如:

App::$model->person 为当前用户,可在/app/model/person.php中定义

除了系统预设的person模型外,用户也可自定义模型,例如我们新建一个team模型

第一步,我们在/app/model/目录或者子目录/孙目录下新建一个文件/app/model/team.php

  1. // team.php
  2. namespace app\model;
  3. use App;
  4. /**
  5. * @property \app\dao\teamDAO $teamDAO
  6. * @property \app\dao\userDAO $userDAO
  7. */
  8. class team extends baseModel
  9. {
  10. /**
  11. * @var array 单例对象
  12. */
  13. protected static $_instance = [];
  14.  
  15. /**
  16. * 构造函数
  17. * @param $id
  18. */
  19. protected function __construct($id)
  20. {
  21. $this->DAO = $this->teamDAO;
  22. if ($id !== NULL){
  23. $this->_data = $this->DAO->getByPk($id);
  24. $this->_pk = $id;
  25. }
  26. }
  27.  
  28. /**
  29. * 自定义方法 返回用户人数
  30. */
  31. public function getTotal()
  32. {
  33. // 获取team_id标记为当前team的用户数
  34. return $this->userDAO->filter(['team_id'=>$this->id])->count();
  35. }
  36. }

然后就可以在代码中调用了,例如一个标记团队vip等级的功能,如下:

  1. // 获取team数据模型
  2. $team = App::$model->team($id)
  3. if ($team->getTotal() > 100) {
  4. // 修改对应数据库字段并保存,以下方法为baseModel中公共方法,继承baseModel即可使用
  5. $team->vipLevel = 1;
  6. $team->save();
  7. }

注意:类名,文件名,model变量名,三者需要保持一致,否者系统会找不到对应的模型。

数据模型也可以定义参数的调用方式,或者多参数模式的函数调用方式,都通过init方法来实现

App::$model->team 相当于调用 \app\model\team::init()

App::$model->team(10, false) 相当于调用 \app\model\team::init(10, false)

所以只需要覆盖掉baseModel中的init方法,即可自定义初始化模型了。

另外,可以在/lib/Model.php中添加 @property@method 使得IDE能够认识变量并具有补全的功能。

  1. /**
  2. * Class Model
  3. * @package biny\lib
  4. * @property \app\model\person $person
  5. * @method \app\model\person person($id)
  6. * @method \app\model\team team($id)
  7. */