模型数据
用户可以在/app/model/
下自定义model数据类,通过App::$model
获取,例如:
App::$model->person
为当前用户,可在/app/model/person.php
中定义
除了系统预设的person
模型外,用户也可自定义模型,例如我们新建一个team
模型
第一步,我们在/app/model/
目录或者子目录/孙目录下新建一个文件/app/model/team.php
// team.php namespace app\model;use App;/** * @property \app\dao\teamDAO $teamDAO * @property \app\dao\userDAO $userDAO */ class teamextends baseModel- {
/** * @var array 单例对象 */ protected static $_instance = [];/** * 构造函数 * @param $id */ protected function __construct ($id )- {
$this ->DAO =$this ->teamDAO ;if ($id !==NULL ){$this ->_data =$this ->DAO ->getByPk ($id );$this ->_pk =$id ;- }
- }
/** * 自定义方法 返回用户人数 */ public function getTotal ()- {
// 获取team_id标记为当前team的用户数 return $this ->userDAO ->filter (['team_id' =>$this ->id ])->count ();- }
- }
然后就可以在代码中调用了,例如一个标记团队vip等级的功能,如下:
// 获取team数据模型 $team = App::$model ->team ($id )if ($team ->getTotal () > 100) {// 修改对应数据库字段并保存,以下方法为baseModel中公共方法,继承baseModel即可使用 $team ->vipLevel = 1;$team ->save ();- }
注意
:类名,文件名,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能够认识变量并具有补全的功能。
/** * Class Model * @package biny\lib * @property \app\model\person $person * @method \app\model\person person($id) * @method \app\model\team team($id) */