模型修改和查询
前边我们学过save() saveAll()来保存数据,此方法也可以修改数据
//使用 get()方法通过主键获取数据,然后通过 save()方法保存修改,返回布尔值; $user = UserModel::get(118); $user->username = '李黑'; $user->email = 'lihei@163.com'; $user->save();
//通过 where()方法结合 find()方法的查询条件获取的数据,进行修改; $user = UserModel::where('username', '李黑')->find(); $user->username = '李白'; $user->email = 'libai@163.com'; $user->save();
save()方法只会更新变化的数据,如果提交的修改数据没有变化,则不更新;
但如果你想强制更新数据,即使数据一样,那么可以使用 force()方法;
$user->force()->save();
使用save方法的第二个参数实现过滤更新
public function show(){ //实例化模型User $user=new User(); //save 方法两个数组,第一个数组为 要新增或要修改的数据,第二个数组为where条件 成功返回true 否则 flse return json($user->save(['bname'=>'du伟'],['bid'=>1])); }
使用静态方法结合 update()方法来更新数据,这里返回的是影响行数;
public function show(){ //实例化模型User $user=new User(); //更新bid 为1 的bname=duwei 返回更新的条目 return json($user::where('bid',1)->update(['bname'=>'duwei'])); }
数据查询
模型类
<?php namespace app\model; use think\Db; use think\Model; class User extends Model{ //继承model基类后,会有delete 和静态destroy其他的一些方法可以调用 //指定主键 public $pk='bid'; }
控制器
public function show(){ //通过静态get方法获取模型类主键的信息 $user=User::get(1); return json($user); }
使用where过滤查询,
public function show(){ //通过静态get方法获取模型类主键的信息 $user=new User(); //使用where过滤查询 return json($user::where('bid',1)->find()); }
不管是 get()方法还是 find()方法,如果数据不存在则返回 Null;
通过模型->符号,可以得到单独的字段数据(前提是模型对象中已经查到了数据),但是 不建议这么使用
public function show(){ //通过静态get方法获取模型类主键的信息 $user=new User(); //使用getAttr可以获取一列的信息,前提示已经有了查询如 ->select()->getAttr();或->find()->getattr(); return json($user::find()->getAttr('bname')); }
public function show(){ //这样也可以 $user = User::find(); return $user->getAttr('bname'); }
写在模型端
模型
<?php namespace app\model; use think\Db; use think\Model; class UserModel extends Model{ //继承model基类后,会有delete 和静态destroy其他的一些方法可以调用 //指定主键 public $pk='bid'; public function showGet($str){ return self::find()->getAttr($str); } }
控制器
<?php namespace app\controller; use think\Controller; use app\model\Article; use app\model\User; use app\model\UserModel; use think\Db; class IndexCOntroller extends Controller{ public function show(){ $user = new UserModel(); return $user->showGet('bname'); } }
通过 all()方法,实现 IN 模式的多数据获取;
$user = UserModel::all('79, 118, 128'); $user = UserModel::all([79, 118, 128]);
使用链式查询得到想要的数据;
UserModel::where('gender', '男')->order('id', 'asc')
->limit(2)->select();
获取某个字段或者某个列的值;
UserModel::where('id', 79)->value('username'); UserModel::whereIn('id',[79,118,128])->column('username','id');
模型支持动态查询:getBy*,*表示字段名;
UserModel::getByUsername('辉夜');
UserModel::getByEmail('huiye@163.com');
模型支持聚合查询;
UserModel::max('price');