1.查询范围
对于一些常用的查询条件,我们可以封装成查询范围来进行方便的调用。
例如,邮箱地址为 thinkphp@qq.com 和status为1这两个常用查询条件,可以定义为模型类的两个查询范围
方法:
<?php namespace appindexmodel; use thinkModel; class User extends Model { // 定义类型转换 protected $type = [ 'birthday' => 'timestamp:Y/m/d', ]; // 定义自动完成的属性 protected $insert = ['status']; // status修改器 protected function setStatusAttr($value, $data) { return '流年' == $data['nickname'] ? 1 : 2; } // status读取器 protected function getStatusAttr($value) { $status = [-1 => '删除', 0 => '禁用', 1 => '正常', 2 => '待审核']; return $status[$value]; } // email查询 protected function scopeEmail($query) { $query->where('email', 'thinkphp@qq.com'); } // status查询 protected function scopeStatus($query) { $query->where('status', 1); } }
查询范围方法的定义规范为:
scope + 查询范围名称
支持多次调用 scope 方法,并且可以追加新的查询及链式操作,例如:
// 根据查询范围获取用户数据列表 public function index() { // $list = UserModel::scope('email') ->scope('status') ->scope(function ($query) { $query->order('id', 'desc'); }) ->all(); foreach ($list as $user) { echo $user->nickname . '<br/>'; echo $user->email . '<br/>'; echo $user->birthday . '<br/>'; echo $user->status . '<br/>'; echo '-------------------------------------<br/>'; } }