模型修改和查询

前边我们学过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');

 

 

 

 

 

 

 

 

 

 

 

 

 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
posted @ 2021-12-13 11:10  WhiteSpace  阅读(66)  评论(0编辑  收藏  举报