批改状态:未批改
老师批语:
<?php
namespace app\index\controller;
use think\Controller;
use app\index\model\Staff as StaffModel;//设置别名以免冲突
class Staff extends Controller
{
//实例化模型
public function instance(StaffModel $staff)
{
// $staff = new StaffModel; //模型实例化
dump($staff->getName()); //查看模型名称
//新增一条记录
$staff->name = '抖音小王子';
$staff->sex = 1;
$staff->age = 25;
$staff->phone_number = 12598875435;
//新增操作
$staff->save();
return '成功添加一条记录,id='.$staff->id;
//实际开发中,基本上都是用静态方法完成模型操作
}
//模型查询
public function query()
{
//1.单条记录:get(主键、闭包)
//闭包:就是一个匿名回调函数,将函数作为参数进行传递
//
//
//new StaffModel
// $staff = StaffModel::get(2);//模型返回值是对象
// dump($staff);//array
// echo "<hr>";
// var_dump($staff);//object
// echo '<hr>';
// echo $staff['name'];
// echo '<br>';
// echo $staff->name;
// echo '<hr>';
// //用闭包来创建查询条件
// $staff = StaffModel::get(function($query){
// $query->where('id','>',10)->where('age','>',50);
// });
// echo 'ID大于10,年龄大于50的员工信息';
// dump($staff);
// echo '<hr>';
// //直接静态调用Db类的查询构造器进行查询
// // StaffModel == Db::table('staff');
// $staff = StaffModel::where('id','>',10)
// ->where('age','>',50)
// ->find();
// dump($staff);
//2.查询多条记录,all(主键列表/闭包)
//返回值是多个数组/对象数组
// $staffs = StaffModel::all(); //不传参数,查询的是所有数据
// $staffs = StaffModel::all([1,2,3]);// 查询的是主键为1.2.3的数据 SELECT * FROM `staff` WHERE `id` IN (1,2,3)
//
// 闭包方式传入查询条件
$staffs = StaffModel::all(function($query){
$query->where('sex','=',0)->where('age','>',40)->field(['name','age','sex']);
});
// var_dump($staffs);
foreach ($staffs as $staff) {
echo '姓名:'.$staff->name.'<br>';
echo '年龄:'.$staff->age.'<br>';
echo '性别:'.$staff->sex.'<hr>';
}
echo '<br>';
//采用闭包来实现将请求变量注入到闭包条件中 也就是把条件的值用一个变量来替代 ,
//可在URL中传值实现动态查询
//$this->request : 请求对象
$sex = $this->request->param('sex') ?: 1;
$age = $this->request->param('age') ?: 40;
$staffs = StaffModel::all(function($query) use($sex,$age) {
$query->where('sex','=',$sex)->where('age','>',$age)->field(['name','age','sex']);
});
dump($staffs);
}
public function update()
{
//基于查询的,不允许无条件更新 //先是查询再更新
// $staff = StaffModel::get(4);
// $staff->name = '王麻子';
// $staff->save();
//
//
//
// 静态方法:update(数据,条件,字段)、、一般只用到前两个参数,数据就是需要改成的目标
// StaffModel::update(
// ['name'=>'李刚'],
// ['id'=>8]
// );
//
//
// 复杂更新
// 将id大于20的员工年龄加上5岁
// StaffModel::update(
// ['age'=>\think\Db::raw('age+5')],
// function($query){
// $query->where('id','>',20);
// }
// );
//也可以用查询构造器来更新数据
// StaffModel::where('id','>=',20)->data('age',\think\Db::raw('age+1'))->update();
StaffModel::where('id','>=',20)->data(['age'=>\think\Db::raw('age+5')])->update();
}
//创建模型:添加数据
public function create()
{
//save()
//create(数据,字段) 允许添加的字段 静态方法
$data = [
'name'=>'孙悟空',
'sex'=>0,
'age'=>100,
'phone_number'=>125487824
];
// $field =['name','sex','age','phone_number'];
// $field =['name','sex','age'];
// StaffModel::create($data,$field);
//
//
// 查询构造器添加数据
StaffModel::insert($data);
}
//模型删除:删除记录
public function delete()
{
//静态方法 destroy(主键,主键列表,闭包)
// StaffModel::destroy(28);
// StaffModel::destroy([1,2,3]);
// SELECT * FROM `staff` WHERE `id` = 28
// DELETE FROM `staff` WHERE `id` = 28 先查询ID=28的这条记录再删除
//
// 删除条件推荐使用闭包
StaffModel::destroy(function($query){
$query->where('age','>',50)->where('id','>',23);
});
//查询构造器实现删除
StaffModel::where('age','>',50)
->where('id','>',23)
->delete();
}
//软删除:必须在模型中进行配置 也就是更新模拟删除,增加了一个字段delete_times时间戳
public function softDelete()
{
// StaffModel::destroy(1);
//软删除的数据在普通查询中不可见
// $res = StaffModel::all();
// dump($res);
//
//如果想在查询的时候看到已经被删除的记录
// $res = StaffModel::withTrashed()->select();
//$res = StaffModel::withTrashed()->select();
//只看回收站:
$res = StaffModel::onlyTrashed()->select();
dump($res);
}
public function restore(StaffModel $staff)
{
//恢复软删除的数据
$res = $staff->restore(['id'=>1]);
echo $res ? '恢复成功' : '失败';
}
}点击 "运行实例" 按钮查看在线实例
Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号