批改状态:未批改
老师批语:
一、数据库的连接
静态连接
动态连接
环境变量
模型连接
public function demo1()
{
//静态测试
$res = Db::table('staff')->limit(1)->select();
//动态测试
$res = Db::connect('my_db')->table('staff')->limit(2)->select();
//环境变量
$res = Db::table('staff')->limit(3)->select();
//模型连接
$res = Staff::limit(4)->select();
dump($res);
}
//环境变量 database设置
// 数据库类型
'type' => Env::get('database_type'),
// 服务器地址
'hostname' => Env::get('database_hostname'),
// 数据库名
'database' => Env::get('database_database'),
// 用户名
'username' => Env::get('database_username'),
// 密码
'password' => Env::get('database_password'),
//动态连接 在database设置自定义连接
'my_db' => [
// 数据库类型
'type' => 'mysql',
// 服务器地址
'hostname' => 'localhost',
// 数据库名
'database' => 'tp51',
// 用户名
'username' => 'root',
// 密码
'password' => 'root'
]点击 "运行实例" 按钮查看在线实例
二、数据库操作
原生查询读写操作
//原生查询值之读操作
public function demo2()
{
//sql语句 使用命名占位符 以预处理方式执行
$sql = "SELECT `id`,`name`,`age` FROM `staff` WHERE `age` > :age LIMIT :num";
//执行查询结果
$res = Db::query($sql, ['age'=>50, 'num'=>2]);
dump($res);
}
//原生查询之写操作
public function demo3()
{
//这里以更新为例
$sql = "UPDATE `staff` SET `salary` = :salary WHERE `id` = :id";
//执行更新操作 这里用execute
$res = Db::execute($sql, ['salary'=>9000, 'id'=>2]);
dump($res);
}点击 "运行实例" 按钮查看在线实例
查询构造器
//查询构造器 find/select
public function demo4()
{
//find查询符合条件的第一条记录
$res = Db::table('staff')
->field('id,name,age')
->where('age','>', 70)
->find();
//如果想过记录中某一字段的值用value()
$res = Db::table('staff')
->where('age','>', 70)
->value('name');
//select返回满足条件的所有记录
$res = Db::table('staff')
->field('id,name,age')
->where('age','>', 70)
->select();
//如果只想获取某一列的值 用column 可以自定义键 默认为索引
$res = Db::table('staff')
->field('id,name,age')
->where('age','>', 70)
->column('age', 'name');
//打印
dump($res);
}
public function demo5()
{
//查询构造器 insert()新增操作
$data = [
'name' => '欧阳峰',
'sex' => 1,
'age' => 59,
'salary' => 8866.58,
'email' => 'ouyangfeng@php.cn',
'mobile' => 15709883412,
'password' => sha1('123456'),
'create_time' => time(),
'update_time' => time(),
'delete_time' => 0
];
$res = Db::table('staff')->data($data)->insert();
// $res = Db::table('staff')->insert($data);
dump($res);
//如果有多组数据那么用insertAll()
}
//查询构造器 update操作
//查询构造是给予查询操作的
public function demo6()
{
/*$where = ['id'=>22];
$data = ['age'=>99];*/
$where['id'] = 22;
$data['age'] = 99;
$res = Db::table('staff')->where($where)->data($data)->fetchSql(false)->update();
dump($res);
}
//删除操作
public function demo06()
{
$where['id'] = [22, 23];
// $where['id'] = 23;
/*$res = Db::table('staff')->where($where)->fetchSql(false)->delete();
dump($res);*/
}点击 "运行实例" 按钮查看在线实例
查询表达式
//查询表达式
public function demo7()
{
//whereOr() 条件或操作
//where()默认是与操作
//1 字符串
$res = Db::table('staff')
->field('id, name, age, salary')
->where('age > 50')
->where('salary BETWEEN 5000 AND 8000')
->select();
//2 表达式
$res = Db::table('staff')
->field('id, name, age, salary')
->where('age', '>', 50)
->where('salary', 'between', [5000, 8000])
->select();
//3 数组
$where[] = ['age', '>', 50];
$where[] = ['salary', 'between', '5000, 8000'];
$res = Db::table('staff')
->field('id, name, age, salary')
->where($where)
->select();
//如果是简单的等值查询可以简化数组
//$where 初始化条件
$where = [];
$where['id'] = 5;
$res = Db::table('staff')
->field('id, name')
->where($where)
->find();
dump($res);
}点击 "运行实例" 按钮查看在线实例
模型的建立 可以创建在应用目录或者模块目录中,模型通常与一张数据表对应,是数据表的抽象表现,模型的名称应该与数据库表的名称对应实现自动加载,也可以手动设置,模型应该继承框架的模型基类
模型的CURD操作
//模型查询读操作
public function demo8()
{
//1.获取满足条件的第一条记录
// 1.1 get()从主键获取
$res = Staff::get(9);
//1.2查询构造器
$res = Staff::field('id, age, name')
->where('age', '>', 70)
->find();
//1.3闭包
//Query类 开头引入了 $query是连接对象
$res = Staff::get(function (Query $query) {
$query->field('id, name, age')
->where('age', '>', 70);
});
//2 all()获取满足条件的所有记录
//2.1获取全部
$res = Staff::all();
//2.2获取指定主键
// $res = Staff::all('2, 3, 6');
$res = Staff::all([2,3,6]);
//2.3查询构造器
$res = Staff::field('id, name, age')
->where('age', '>', 70)
->select();
//2.4闭包
$res = Staff::all(function (Query $query) {
$query->field('id, name, age')
->where('age', '>', 70);
});
dump($res);
}
//模型操作之新增操作
public function demo9()
{
$data = [
'name' => '沙通天',
'sex' => 1,
'age' => 39,
'salary' => 4533.58,
'email' => 'shatongtian@php.cn',
'mobile' => 15712383412,
'password' => sha1('123456'),
'create_time' => time(),
'update_time' => time(),
'delete_time' => 0,
];
//静态方法新增create()
$res = Staff::create($data);
dump($res);
}
//模型操作之更新删除
public function demo10()
{
//更新id为22的记录的age为99
$res = Staff::update(['age'=>99],['id'=>22]);
//删除id为22的记录
$res = Staff::destroy(['id'=>22]);
dump($res);
}点击 "运行实例" 按钮查看在线实例
获取器 设置器
//获取器 修改器 需要现在模型中添加操作
public function demo11()
{
$res = Staff::get(1);
//调用获取器创建的新字段info 获取器返回的是对象
$res = $res->info;
dump($res);
}
//模块设置器测试 以创建事件为例
public function demo12()
{
//在做设置器时 首先要做查询操作 要设置那个记录的什么字段
$res = Staff::get(1);
//设置自定义的创建时间
$res->create_time = '2019-03-28';
$res->save();
dump($res);
}
//在模型中要建立相应的获取器和设置器 也就是方法 方法名为获取器get字段名Attr 设置器set字段名Attr
//要用大驼峰写法 里面的参数$value是获取的字段值或者为设置的字段值 第二个参数可以获取当前记录的所有数据
class Staff extends Model
{
//配置数据库连接参数
protected $connection = 'my_db';
//获取器 设置性别
protected function getSexAttr($value)
{
return $value ? '男' : '女';
}
//获取器创建时间
protected function getCreateTimeAttr($value)
{
return date('Y-m-d H:i:s', $value);
}
//获取器支持第二个参数 用来获取该记录的其他数据
protected function getEmailAttr($value, $data)
{
return $data['name'] . '的邮箱是' . $value;
}
//第二个参数 可以创建一个不存在的字段info 提供给控制器里的操作来用
//第二个参数带来极大便利 想购物网站里的收货地址就可以动态生成
protected function getInfoAttr($value, $data)
{
return $data['name'] . '的年龄是' . $data['age'] . '工资是' . $data['salary'];
}
//设置设置器 他是同获取器相配套的 这里设置创建时间
protected function setCreateTimeAttr($value)
{
return strtotime($value);
}
}点击 "运行实例" 按钮查看在线实例
Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号