欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

数据库查询构造器中10个最常用方法-2018年5月24日18点

程序员文章站 2024-04-04 11:04:23
...

笔记:删除和更新需基于条件,不然很危险,insertGetId() == insert() + getLastInsID[],

实例:对数据库php里staff表的CURD操作,

配置数据库,在 controller控制器层创建Query控制器(Query.php),并引入Db,创建Query类

<?php
namespace app\index\controller;
use think\Db;

class Query
{
	//读操作返回的都是二维数组,没有满足条件的记录,返回的是一个空数组、
	//写操作返回的是受影响的记录数,如果没有返回0
	public function find()
	{
		//查询单条记录数
		$res = Db::table('staff')
		// ->field('name,sex,salary')
		->field(['name'=>'姓名','sex','salary'])
		->where('staff_id','=',10) //where(字段、表达式、条件)
		->find();
		dump($res);
	}

	public function select()
	{
		//查询多条记录
		$res = Db::table('staff')
		->field(['name'=>'姓名','sex,salary'])
		// ->where('salary > 3000')
		->where('salary', '>',3000)//表达式
		->order('salary', 'DESC')
		->select();
		dump($res);
	}
	public function insert()
	{
		//新增单条记录:insert()
		$data=[
			'name'=>'胡三刀',
			'sex'=>0,
			'age'=>32,
			'salary'=>6200
		];

		// $num = Db::table('staff')->insert($data);
		// $id = Db::getLastInsID();
		// return $num? '添加成功,id='.$id:'没有记录被添加';

		//data($data):将要处理的数据打包到$option[]
		//insertGetId() == insert() + getLastInsID[]
		
		// $id = Db::table('staff')->insertGetId($data);
		// return $id? '添加成功,id='.$id : '没有记录被添加';

		// $num = Db::table('staff')->data($data)->insert();
		// $id = Db::getLastInsID();
		// return $num? '添加成功,id='.$id:'没有记录被添加';
		// 
		// 新增多条记录insertAll()
		$data = [
			['name'=>'刘备','sex'=>0,'age'=>45,'salary'=>9000],
			['name'=>'关羽','sex'=>0,'age'=>42,'salary'=>8000],
			['name'=>'张飞','sex'=>0,'age'=>38,'salary'=>8000],

		];
		$num = Db::table('staff')->data($data)->insertAll();
		return $num? '添加成功,新增了'.$num.'条记录':'没有记录被添加';
	}
	public function update()
	{
		//更新操作必须是基于前置查询,不允许无条件更新 ,也是一个终极方法
		//将工资小于等于4000的员工加薪1000
		// $num = Db::table('staff')
		// 	->data(['salary'=>Db::raw('salary+1000')])
		// 	->where('salary','<=',4000)
		// 	->update();

		$num = Db::table('staff')
			->update(['sex'=>1,'staff_id'=>17]);

		return $num? '更新成功'.$num.'条记录':'没有记录被更新';
	}

	public function delete()
	{
		//删除也必须基于前置查询,不允许无条件删除
		//删除用的是delete()
		// $num = Db::table('staff')->delete(26);
		// $num = Db::table('staff')->delete([18,19,25]);
		$num = Db::table('staff')->where('staff_id',19)->delete();

		// $num = Db::table('staff')->where(true)->delete();//可以将当前表清空

		return $num ? '删除成功'.$num.'条记录':'没有记录被删除';

		//删除数据是一个危险的操作,建议使用软删除来实现,用更新来模拟删除
	}
}
//提示:在实际的开发过程中,尽可能不要在控制器中操作数据库,而是采用模型来实现