tp5的model层 增删改查的应用

跨控制器查询
use Home\Controller\MemberController as Member;//引入控制器
$arr = A(‘Home/Member’)->allproduct();//调用方法
时间区域查询

$before_time = date('Y-m-d 00:00:00', strtotime('-3 day'));//3天前
    $day = date('Y-m-d H:i:s');//现在
    $map['update_time'] = array(array('EGT', $before_time), array('ELT', $day));

三种方式:

$model = new IndexModel(); //new的方式
$model = model('类名');//函数的方式
$model = IndexModel::get();//静态方式
//获取get/post的数据
$date = input('get.');
$res = input('post.');
//接收传来的值直接操作
$model= new IndexModel($_POST);
//过滤掉表中没有的字段
$model->allowField(true)->save();
//获取对象里面的数据
$date =$model->get(1);
$id = $date->id;
$name = $date->name;
//model层分页
$date = $model->where('status',3)->paginate(10);//查询状态为3的用户数据 并且每页显示10条数据
$pages = $date->render();//前端显示{$pages}
//->paginate(10,100);  第一个参数是每页显示数据多少条,第二个参数是总记录数
  1. 创建model层代码

    创建模块
    php think build --module index
    创建控制器
    php think make:controller index/Index --plain
    创建M
    php think make:model index/Index
    
  2. model层代码

    <?php
    namespace app\index\model;
    use think\Model;
    class Index extends Model
    {
        protected $pk = 'id';//主键
        // 设置当前模型对应的完整数据表名称
        protected $table = 'zy_user';
    }
    
  3. controller代码 查询(get();all(); )
    必须设置的重点:(找到TP5框架中的database.php文件,该文件中找到 resultset_type 该项,将后面的 array 改成 \think\Collection 【注意大小写】);
    ‘resultset_type’ => ‘\think\Collection’, 数据集返回类型(这样all也可以用toArry()转换了,改过之后,就算获取数据为空也不报错了!)

    <?php
    namespace app\index\controller;
    
    use think\Controller;
    use app\index\model\Index as IndexModel;
    
    class Index extends Controller
    {
        public function index()
        {
            $model = model('Index');//第一种,直接利用函数model('类名');建议使用这种! 
            //$model = new IndexModel();//第二种,new的方法!
            $id = 3;
            $date = $model->get($id)->toArray();//get()方法需要->toArray获取成数组(查一条数据);
            $date = $model->all()->toArray();//all()方法(查询所有);
          //复杂条件可以用闭包
          // $where = function ($query){
          //$query ->field(['name'])
          //->where('id','=',3);
          // };
         // $date = $model->get($where);  //返回模型对象,想要数组形式 ->toArray();->value('name');直接获取值
         //可以直接获取值
            dump($date);
        }
    }
    

4.删除(delete();

删除模型数据,可以在实例化后调用delete方法

		$id = 3;
        $date = $model->get($id);//必须是模型对象,不能转换成数组形式
        $res = $date->delete(); //delete()方法里面不传任何参数,它只能删除当前模型对应的记录;

根据主键删除(5.0.9版本以上destroy方法传入空数组和空字符串不会进行任何删除操作)

 		$id = 3;
        $res = $model->destroy($id); //支持批量删除多个数据
        //$res = $model->destroy(['id' => 3]);// 删除id为3的数据
        //$res = $model->destroywhere('id','=',3)->delete();
        dump($res);
  1. 创建数据(save();saveAll();create();
    saveAll()实际通过多次执行insert语句,很少用到,就不举例了!

    $res = [
                'user_name'=>'张三',
                'password'=>'123',
            ];
            $model = model('Index');
            $date = $model->create($res);//返回模型对象数组 
            //$date = $model->allowField(true)->create();//过滤非数据表字段
            dump($date->toArray());
            //理论讲,通过模型向表中添加数据,尽可能的用静态方式.
            //$date = IndexModel::create($res);//返回模型对象
            //$id = $date->id;//获取新增的id
            //dump($id);
            
    
            //$model->isUpdate(false)->save();  //显示增加数据
            $date = $model->save($res);//受影响记录数   
            dump($date);
            //判断返回值是否成功
             if ($date ||($date === 0)){ //如果save执行错误返回空,==也是相等的;要===才能区别开来;   
            $this->success('成功添加!');
            }else{
                $this->error('添加失败');
               }
          
    
    
  2. 更新数据(save($date=[ ],$where=[ ]); update($date=[ ],$where=[ ],$field=[ ]); saveAll($date,true); )

     	//方式1   -如果更新多条数据使用saveall data传入二维数组即可
		$model = model('Index');
		$res = [
            'id'=>'3', //传入主键id
            'user_name'=>'张4',
            'password'=>'123',
        ];
        $date = $model->isUpdate(true)->save($res); //返回影响记录数
        dump($date);  //$model->getData();//获取模型里面的数据
      //当更新的数据一样,即使条件不一致时,save方法也不会更新数据。
	  //解决方法:加上isUpdate(true)更新数据。
		//方式2 -推荐
        $model = model('Index');
        $res = [
            'user_name'=>'张4',
            'password'=>'123',
        ];
        $where = ['id' => '3'];
        $model->save($res,$where);

 		//update(更新数据,更新条件,允许更新的字段)   
 		 $model = model('Index');
 		 $res = [
            'user_name'=>'张4',
            'password'=>'123',
            'mobile'=>'1833333333'
        ];  
        //复杂条件可以使用闭包
          // $where = function ($query){
          // $query ->where('id','=','1036');//相等 = 号可以省略  
          // };
        $where = ['id' => '3'];
        $field = ['user_name','mobile']; //只允许更新的字段
        $model->update($res,$where,$field);   //返回模型对象

**注意:

不要在一个模型实例里面做多次更新,会导致部分重复数据不再更新,正确的方式应该是先查询后更
新或者使用模型类的 update 方法更新。
如果你调用save方法进行多次数据写入的时候,需要注意,第二次save方法的时候必须使用
isUpdate(false),否则会视为更新数据。

数据没变,提交更新,返回false;
数据变,提交更新,返回true;
if ($date ||($date === 0)){ //如果save执行错误返回空,==也是相等的;要===才能区别开来;
dump(‘成功’);
}else{
dump(‘失败’);
}

返回的不是false 而是0 你要用恒等判断 是否提交失败

猜你喜欢

转载自blog.csdn.net/weixin_45609681/article/details/103782773