多应用+插件架构,代码干净,二开方便,首家独创一键云编译技术,文档视频完善,免费商用码云13.8K 广告
> ## 在控制器中调用模型进行查询数据 ### 1. 获取单条数据 **在模型内部,请不要使用$this->name的方式来获取数据,请使用$this->getAttr('name') 替代。** ```php // 根据主键查询 $user = User::get(1); echo $user->name; // 根据数组条件查询 $user = User::get(['name' => 'thinkphp']); // 使用闭包函数查询 $user = User::get(function($query){ $query->where('name', 'thinkphp'); }); // 实例化之后调用查询方法 $user = new User(); $user->where('name', 'thinkphp') ->find(); ``` ### 2. 获取多条数据 ```php // 根据主键获取(可以传入字符串或数组) $list = User::all('1,2,3'); $list = User::all([1,2,3]); foreach($list as $key=>$user){ echo $user->name; } // 使用数组条件查询 $list = User::all(['status'=>1]); // 使用闭包查询 $list = User::all(function($query){ $query->where('status', 1)->limit(3)->order('id', 'asc'); }); foreach($list as $key=>$user){ echo $user->name; } // 实例化对象之后调用查询方法 $user = new User(); $user->where('name', 'thinkphp') ->limit(10) ->order('id', 'desc') ->select(); ``` ### 3. 获取单个字段值或者单个列的值 ```php // 获取单个值 User::where('id',10)->value('score'); // 获取某个列的所有值 User::where('status',1)->column('name'); // 以id为索引 (适合构造key=>value组合) User::where('status',1)->column('name','id'); User::where('status',1)->column('id,name'); // 同tp3的getField ``` ### 4. 动态查询(即根据某个字段值进行快捷查询) ``` // 根据name字段查询用户 $user = User::getByName('thinkphp'); // 根据email字段查询用户 $user = User::getByEmail('thinkphp@qq.com'); ``` ### 5.通过Query类进行查询(即链式操作) ``` User::where('id','>',10)->select(); User::where('name','thinkphp')->find(); ``` ### 6. 批量查询(针对大数据量) ``` User::chunk(100,function($users){ foreach($users as $user){ // 处理user模型对象 } }); ``` ### 7. 对查询进行缓存 ``` // get和all的第三个参数表示开启查询缓存 $user = User::get(1,'',true); $list = User::all('1,2,3','',true); ``` ### 8. 主库读取(采用分布式数据库时,如果刚插入数据立刻查询是查不到的,因为从库还没有更新数据,这时候应该从主库进行获取) ``` // 第一种方案: $user = new User; $user->name = 'thinkphp'; $user->email = 'thinkphp@qq.com'; $user->save(); // 从主库读取数据 $user->master()->get($user->id); // 第二种方案: // 5.0.19+之后可以在数据库配置文件进行定义 // 主库写入后从主从库读取 'read_master' => true // 第三种方案: $user = new User; $user->name = 'thinkphp'; $user->email = 'thinkphp@qq.com'; $user->readMaster()->save(); // 后续该模型的操作从主库读取数据 // 后续所有模型的查询都从主库读取数据 $user = new User; $user->name = 'thinkphp'; $user->email = 'thinkphp@qq.com'; $user->readMaster(true)->save(); ```