## 获取单个数据 获取单个数据的方法包括: 取出主键为1的数据 ``` $user = UserModel::get(1); echo $user->user_nickname; // 使用数组查询 $user = UserModel::get(['user_nickname' => '老猫']); // 使用闭包查询 $user = UserModel::get(function($query){ $query->where('user_nickname', 'thinkphp'); }); echo $user->user_nickname; ``` 如果你是在模型内部,请不要使用$this->user_nickname的方式来获取数据,请使用$this->getAttr('user_nickname') 替代。 或者在实例化模型后调用查询方法 ``` $user = new UserModel(); // 查询单个数据 $user->where('user_nickname', '老猫') ->find(); ``` get或者find方法返回的是当前模型的对象实例,可以使用模型的方法。 ## 获取多个数据 取出多个数据: ``` // 根据主键获取多个数据 $users = UserModel::all('1,2,3'); // 或者使用数组 $users = UserModel::all([1,2,3]); foreach($users as $key=>$user){ echo $user->user_nickname; } // 使用数组查询 $users = UserModel::all(['user_status'=>1]); // 使用闭包查询 $users = UserModel::all(function($query){ $query->where('user_status', 1)->limit(3)->order('id', 'asc'); }); foreach($users as $key=>$user){ echo $user->name; } ``` 数组方式和闭包方式的数据查询的区别在于,数组方式只能定义查询条件,闭包方式可以支持更多的连贯操作,包括排序、数量限制等。 或者在实例化模型后调用查询方法 ``` $user = new UserModel(); // 查询数据集 $user->where('user_nickname', '老猫') ->limit(10) ->order('id', 'desc') ->select(); ``` 模型的all方法或者select方法返回的是一个包含模型对象的二维数组或者数据集对象。 ## 数据集循环 模型select,all,paginate方法查询出来的是数据集,都是 `think/Collection` 子类的实例,对于数据集的循环,你可以使用多种方法,第一种就是 foreach,第二是 for,第三种是使用 collection 自带的 each 方法。注意前两种方法不能在循环时更改数据集里的数据,你不能把它当一个数组直接用键值更改,如果你想循环时更改数据集里的数据,只能使用第三种方法。 举例如下: ``` $user = new UserModel(); // 查询数据集 $user ->limit(10) ->order('id', 'desc') ->select(); $user->each(function($item, $key){ //对$item进行数据更改并返回$item $item['user_nickname']='老猫不老'; return $item; }); $user->each(function($item, $key){ // 如果想终止循环返回 false 就可以了 return false; }); ```