跨控制器查询
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); 第一个参数是每页显示数据多少条,第二个参数是总记录数
-
创建model层代码
创建模块 php think build --module index 创建控制器 php think make:controller index/Index --plain 创建M php think make:model index/Index
-
model层代码
<?php namespace app\index\model; use think\Model; class Index extends Model { protected $pk = 'id';//主键 // 设置当前模型对应的完整数据表名称 protected $table = 'zy_user'; }
-
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);
-
创建数据(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('添加失败'); }
-
更新数据(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 你要用恒等判断 是否提交失败