摘要:<?php /** * Created by PhpStorm. * User: Administrator * Date: 2019/4/15 * Time: 19:31 */ //控制器名称和模型及数据库同名称 namespace&nbs
<?php
/**
* Created by PhpStorm.
* User: Administrator
* Date: 2019/4/15
* Time: 19:31
*/
//控制器名称和模型及数据库同名称
namespace app\index\controller;
use think\Controller; //引入控制器
use app\index\model\Staff as StaffModel;
use think\model\concern\SoftDelete; //导入模型,发现模型和控制器名称重名,别名处理:Staff as StaffModel
class Staff extends Controller
{
//实例化模型
public function instance(StaffModel $staff) //依赖注入
{
// $staff = new StaffModel(); //模型实例化
dump($staff->getName()); //查看模型名称
//新增一条记录
$staff ->name = '学习';
$staff ->sex = 0;
$staff -> age =36;
$staff ->salary = 5000;
//新增操作
$staff -> save();
return '新增成功,id='.$staff->staff_id;
//实际开发中,都是用静态方法完成模型操作的
}
//模型查询
public function query()
{
//1.单条记录:get(主键/闭包)
//闭包就是匿名回调函数,将函数作为参数进行传递
//通过查询来创建模型
$staff = StaffModel::get(2);
dump($staff); //系统预处理查看数组
echo '<hr>';
\var_dump($staff); //调用系统函数查看显示对象
echo '<hr>';
echo $staff['name'],'<br>'; //用数组的方式获取值
echo $staff->name,'<br>'; //用对象的方式获取值
//用闭包来查询条件
$staff = StaffModel::get(function ($query){
$query->where('sex',0)->where('salary','>','7000');
});
echo '性别为男,工资大于8000的数据:';
dump($staff);
echo '<hr>';
//直接静态调用Db类的查询构造器进行查询
// StaffModel == Db::table('staff')
StaffModel::where('sex',0)
->where('salary','>',8000)
->find();
dump($staff);
echo '<hr>';
//2.多条记录的查询:all(主键列表/闭包)
//返回值是多维数组/对象数组
// $staff = StaffModel::all(); //查询到所有数据: SELECT * FROM `staff`
// $staff = StaffModel::all([1,2,3]); //获取到的是主键等于1,2,3的3条数据: SELECT * FROM `staff` WHERE `staff_id` IN (1,2,3)
// $staffs = StaffModel::all(function ($query)
// {
// $query->where('age','<',40)
// ->where('salary','<',6000);
// }); // SELECT * FROM `staff` WHERE `age` < 40 AND `salary` < 6000
// dump($staffs);
//用foreach遍历
// foreach ($staffs as $staff)
// {
// echo '姓名:'.$staff->name.'<br>';
// echo '性别:'.$staff->sex.'<br>';
// echo '年龄:'.$staff->age.'<br>';
// echo '工资:'.$staff->salary.'<hr>';
// }
//采用闭包将变量注入到闭包条件中
// $this->request === new \think\facade\Request; //请求对象
$age = $this->request->param('age') ? : 40;
$salary = $this->request->param('salary') ? : 5000;
$staffs = StaffModel::all(function ($query) use ($age,$salary)
{
$query->where('age','<',$age)
->where('salary','<',$salary);
});
//用foreach遍历
// foreach ($staffs as $staff)
// {
// echo '姓名:'.$staff->name.'<br>';
// echo '性别:'.$staff->sex.'<br>';
// echo '年龄:'.$staff->age.'<br>';
// echo '工资:'.$staff->salary.'<hr>';
// }
dump($staffs);
}
//模型更新
public function update(){
//基于前置条件查询的,不允许无条件更新
// $staff =StaffModel::get(3); //条件查询出数据
// $staff ->name = '无忌哥哥'; //更新字段内容
// $staff ->save(); //私有方法,将数据写回到数据库
//建议用静态方法:update(数据,条件,字段)
StaffModel::update(
['name'=>'张无忌'],
['staff_id'=>3]
);
//复杂更新
//将年龄大于50的都加500
// StaffModel::update(
// ['salary'=>\think\Db::raw('salary+500')],
// function ($query){
// $query->where('age','>=',50);
// }
// );
//也可以使用查询构造器来更新数据
StaffModel::where('age','>',50)
->data(['salary'=>\think\Db::raw('salary+500')])
->update();
}
//创建模型:添加数据
public function create()
{
//1.save()
//2.create(数据,字段)
$data =[
'name'=>'孙唐22',
'sex'=>0,
'age'=>999,
'salary'=>8888
];
// $field = ['name','sex','age','salary'];
// $field = ['name','sex'];
// StaffModel::create($data,$field); //不允许添加的数据会调用默认值
//3.用查询构造器来插入数据
StaffModel::insert($data);
}
//模型删除:删除记录
public function delete()
{
//destroy(主键/主键列表/闭包)
// StaffModel::destroy(32); //先查询再删除2条sql语句
// StaffModel::destroy([1,5,6]); //先查询再删除2条sql语句
//删除条件推荐使用闭包
StaffModel::destroy(function ($query){
$query->where('age','>',55)
->where('salary','>=',5000);
});
//执行结果: SELECT * FROM `staff` WHERE `age` > 55 AND `salary` >= 5000
//查询构造器实现删除
StaffModel::where('age','>',50)
->delete();
//DELETE FROM `staff` WHERE `age` > 50
}
//软删除:必须在模型中进行配置,用更新模拟删除
public function softDelete()
{
// StaffModel::destroy(29);
//软删除在普通查询中不可见
// $res =StaffModel::where('staff_id < 5')->select();
//查看含有被软删除的记录
// $res =StaffModel::withTrashed()->where('staff_id < 5')->select();
//查看已被软删除的记录
$res =StaffModel::onlyTrashed()->select();
dump($res);
}
//软删除的记录的恢复
public function softRestore(){
$res = StaffModel::onlyTrashed()->find(29);
$res->restore();
//执行结果SQL:UPDATE `staff` SET `delete_time` = 0 WHERE ( `staff_id` = 28 ) AND `delete_time` <> 0
}
}数据库查询操作是基础,更新和删除必须要有前置查询条件,删除操作一般都用软删除来更新到回收站,在回收站再用物理删除彻底删除。
批改老师:查无此人批改时间:2019-04-18 09:47:24
老师总结:完成的不错。数据库一般是不删除数据的,所有数据都要保留。继续加油。