摘要:<?php namespace app\index\controller; use think\Db; use think\Controller; use app\index\model\Staff as StaffModel;//设置别名,防止与当前控制器冲突 class Staff extends
<?php
namespace app\index\controller;
use think\Db;
use think\Controller;
use app\index\model\Staff as StaffModel;//设置别名,防止与当前控制器冲突
class Staff extends Controller{
public function instance(StaffModel $staff){//依赖注入
//新增一条记录
$staff->name='minle';
$staff->sex='1';
$staff->age='36';
$staff->salary='6500';
$staff->save();
return '新增成功,id='.$staff->staff_id;
//实际工作中,我们几乎全部采用模型的静态方法调用来实现数据操作
}
//模型查询
public function query(){
//1.单条记录:静态get(主键/闭包)方法
//闭包就是一个匿名回调函数
//此时完成了二个操作:1创建模型对象2.模型对象初始化
//$staff=StaffModel::get(2);
//dump($staff);
//如果查询条件复杂可以使用闭包方式创建查询条件
//$staff=StaffModel::get(function($query){
//$query->where('sex',0)->where('salary','>',8000);
//});
//echo '性别为男,工资大于8000的员工信息:<br>';
//dump($staff);
//echo '<hr>';
//也可以直接调用Db类的查询构造器来进行查询
//模型可以静态调用所有的查询构造器的方法
$staff=StaffModel::field('name,salary')->where('age','>',40)->find();
dump($staff);
echo '<hr>';
$staffs=StaffModel::all(function($query){
$query->where('age','<=',40)->where('salary','>',3000);
});
foreach($staffs as $staff){
echo '姓名'.$staff->name.'<br>';
echo '年龄'.$staff->age.'<br>';
echo '工资'.$staff->salary.'<hr>';
}
echo '<hr color="red">';
//采用闭包的好处非常多,特别是支持查询变量从外部传入
//举例,查询条件由用户通过URL请求提供
//控制器提供一个属性$request,其值就是请求对象,可用来快速请求变量
//如果当前请求变量中存在age和salary由获取到,否则使用默认值40,3000
$age=$this->request->param('age')? :40;
$salary=$this->request->param('salary')?:3000;
$staffs=StaffModel::all(function($query) use ($age,$salary){
$query->where('age','<=',$age)->where('salary','>',$salary);
});
dump($staffs);
}
//模型更新
public function update(){
//更新必须是基于查询的,不允许无条件更新
//最简单直观的方式是先查询,在模型调用save();
//$staff=StaffModel::get(2);
//$staff->name='龙姑娘';
//$staff->save();//将更新数据写到表中,返回受影响的数量
//改写上面的案例,将龙姑娘改成小龙女
//StaffModel::update(
// ['name'=>'小龙女'],
// ['staff_id'=>2]
//);
//下面我们进行一个更加复杂的更新操作
//将年龄大于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(){
$data=[
'name'=>'孙悟空',
'sex'=>0,
'age'=>100,
'salary'=>8888
];
$field=['name','age','sex','salary'];
StaffModel::create($data,$field);
}
public function delete(){
StaffModel::destroy(49);
}
public function softDelete(){
StaffModel::destroy(1);
//UPDATE `staff` SET `delete_time` = 1542436503 WHERE ( `staff_id` = 1 ) AND `staff`.`delete_time` = '0'
//
}
}一、创建模型
1. 编程方式: application/index/model/Staff.php
2. 命令方式:
(1)切换think命令所在目录下;
(1)运行: php think make:model index/Staff,自动创建index/model/Staff.php,如果没有
model目录,则自动创建;
(2)运行: php think make:model Staff,如果省略模块名,默认为common模块,
模型位于:application/common/model/Staff.php,common模块如果不存在也会自动创建;
3. 默认情况下:Staff模型与数据表staff对应
--------------------------------------------------------------------------------
二、调用模型
use app\index\model\Staff;
1. 实例化调用: $staff = new Staff();
2. 静态查询调用: $staff = Staff::get();
3. 助手函数调用: $staff = model('Staff');
不推荐用助手函数,因为model()无法调用模型静态方法
批改老师:天蓬老师批改时间:2018-11-18 09:39:57
老师总结:作业完成的不错,合格。总结也很到位,继续努力