作业 跟老师代码手写:Model中CURD操作

Original 2018-11-17 23:20:15 247
abstract:<?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()无法调用模型静态方法


Correcting teacher:天蓬老师Correction time:2018-11-18 09:39:57
Teacher's summary:作业完成的不错,合格。总结也很到位,继续努力

Release Notes

Popular Entries