TP5+Fastadmin常用的方法
时间:2023年07月02日
/来源:网络
/编辑:佚名
TP5 常用方法
1. where
php复制代码$where = [
'name' => 'Tom',
'age' => ['>', 20]
];
$result = Db::table('users')
->where($where)
->select();
// 等价于
$result = Db::table('users')
->where('name', 'Tom')
->where('age', '>', 20)
->select();
2. whereRaw
php复制代码$result = Db::table('users')
->whereRaw('age > ? and status = ?', [20, 1])
->select();
// 等价于
$result = Db::table('users')
->where('age', '>', 20)
->where('status', '=', 1)
->select();
3. whereBetween
php复制代码$result = Db::table('users')
->whereBetween('age', [20, 30])
->select();
4. whereNull
php复制代码$result = Db::table('users')
->whereNull('email')
->select();
// 等价于
$result = Db::table('users')
->where('email', 'NULL')
->select();
5. whereIn
php复制代码$result = Db::table('users')
->whereIn('name', ['Tom', 'Jerry', 'Mike'])
->select();
6. page
php复制代码// 该方法用于指定查询结果的分页条件,其参数为一个数字表示当前页数。
$result = Db::table('users')
->page(2)
->select();
// 等价于
$result = Db::table('users')
->limit(10, 10)
->select();
7. having
php复制代码// 查询年龄大于 20 的用户,且他们拥有的订单数不少于 10
// 该方法用于添加 HAVING 子句,与 WHERE 类似,但是主要用于聚合查询
$result = Db::table('users')
->join('orders', 'users.id=orders.user_id', 'LEFT')
->where('age', '>', 20)
->group('users.id')
->having('count(orders.id)', '>=', 10)
->select();
8. group
php复制代码// 查询每个城市的用户数和平均年龄
$result = Db::table('users')
->field('city, count(id) as count, avg(age) as avg_age')
->group('city')
->select();
9. 模糊查询
php复制代码// TODO 1 使用 `where` 方法的回调函数来添加多个查询条件。该回调函数会接收一个 `$query` 对象参数,可以在其中调用多个 `where` 方法实现多条件查询。需要注意的是,多个 `where` 方法之间的关系是 **AND** 关系,即所有条件都要满足。最后调用 `select` 方法执行查询,并返回结果数组。
$query = Db::table('user') // 指定查询的表
->where(function ($query) {
$query->where('name', 'like', '张%') // 姓张
->where('phone', 'like', '156%') // 手机号以156开头
->where('gender', '=', '男') // 性别是男
->where('birthday', '>=', '2002-04-07 00:00:00') // 出生日期大于等于2002年4月7日
->where('birthday', '<', '2002-04-08 00:00:00'); // 出生日期小于2002年4月8日
});
$data = $query->select(); // 执行查询操作,并返回结果数组
// TODO 2 先使用 `where` 方法的回调函数将多个查询条件组合成一个 `$where` 对象。然后在主查询中直接传入 `$where` 对象,一次性实现多条件查询。最后调用 `select` 方法执行查询,并返回结果数组。此时所有条件之间的关系也是 **AND** 关系,即所有条件都要满足
$where = function ($query) {
$query->where('name', 'like', '张%') // 姓张
->where('phone', 'like', '156%') // 手机号以156开头
->where('gender', '=', '男') // 性别是男
->where('birthday', '>=', '2002-04-07 00:00:00') // 出生日期大于等于2002年4月7日
->where('birthday', '<', '2002-04-08 00:00:00'); // 出生日期小于2002年4月8日
};
$query = Db::table('user') ->where($where); // 将所有条件组合成一个 $where 对象,再一次性传入主查询中
$data = $query->select(); // 执行查询操作,并返回结果数组
// TODO 3 使用 `$where` 数组将多个查询条件存储起来。数组中的每个键值对分别代表一个查询条件,其键为查询字段名,其值为一个数组,其中第一个元素为比较运算符,第二个元素为比较的值。最后在主查询中直接传入 `$where` 数组,一次性实现多条件查询。需要注意的是,如果同一个字段有多个查询条件,后面的会覆盖前面的。最后调用 `select` 方法执行查询,并返回结果数组。
$where = [
'name' => '张%', // 姓张
'phone' => '156%', // 手机号以156开头
'gender' => '男', // 性别是男
'birthday' => ['>=', '2002-04-07 00:00:00'], // 出生日期大于等于2002年4月7日
'birthday' => ['<', '2002-04-08 00:00:00'], // 出生日期小于2002年4月8日
];
$query = Db::table('user') ->where($where); // 直接将 $where 数组作为参数传入 where 方法中
$data = $query->select(); // 执行查询操作,并返回结果数组
Log 日志
1. 引入类: use think\Log;
2. 记录日志:
php复制代码// 通过Log类的record()方法,记录一条日志
Log::record('这是一条普通日志');
// 记录一个错误级别的日志,使用error()方法
Log::error('这是一条错误日志');
// getLastSql() 函数获取最后一个执行的 DELETE SQL 语句,并将其打印到日志文件中, db()全局函数,不需要填写表名
Log::error('数据操作失败:' . $e->getMessage() . ' SQL: ' . db()->getLastSql());
// 记录一个信息级别的日志,使用info()方法
Log::info('这是一条信息日志');
3. 配置日志:
php复制代码// 日志配置
return [
// 默认日志记录方式,按照日期记录,每天一个日志文件
'type' => 'File',
// 日志存储路径
'path' => '../runtime/logs/',
// 日志记录级别,Debug级别将记录所有信息,包括Trace信息
'level' => ['error', 'notice', 'warning'],
// 单个日志文件的大小限制,单位为MB
'file_size' => 10240
];
fastadmin的日志配置文件为config/log.php,存储在../runtime/logs/路径下
Validate 验证
1. 引入类: use think\Validate;
2. 定义验证规则:
php复制代码 private function handleData($param)
{
// TODO 对请求参数进行验证
$validate = new Validate([
'name|活动名称' => 'require',
'amount|红包总额' => 'require|number|max:10',
]);
// TODO 将参数中的各个值取出并保存在一个数组中,返回该数组
$data = [
'name' => $param['name'],
'amount' => $param['amount'],
];
return $data;
}
更多验证规则可以参考ThinkPHP5的官方文档:www.kancloud.cn/manual/thin…
3. 执行验证:
php复制代码 public function add()
{
// 实例化验证器对象,使用rules()方法返回的验证规则
$validator = $this->handleData($param);
// 获取请求参数
// $params = input('post.');
// $params = $this->request->isPost()
$params = $this->request->param()
// 执行验证
if (!$validator->check($params)) return $this->error($validator->getError());
// 验证通过,继续执行操作
// ...
}
上传 EXCEL
1. 引入excel类:use PhpOffice\PhpSpreadsheet\IOFactory;
2. 定义方法:
php复制代码public function uploadExcel()
{
$this->request->filter(['trim', 'strip_tags']);
// !非POST请求
if (!$this->request->isPost()) return $this->error('请求方式不正确');
// 获取上传的文件
$file = request()->file('file');
// 判断文件是否上传成功
if ($file) {
// 上传文件并保存到指定目录
$info = $file->validate(['ext' => 'xlsx,xls'])->move(ROOT_PATH . 'public' . DS . 'uploads');
if ($info) {
// 获取上传文件的路径
$filePath = $info->getSaveName();
// 使用PhpSpreadsheet库的IOFactory类来创建一个Xlsx格式的读取器,然后使用该读取器加载Excel文件并读取文件内容
// 读取Excel文件内容
$reader = IOFactory::createReader('Xlsx');
$spreadsheet = $reader->load(ROOT_PATH . 'public' . DS . 'uploads' . DS . $filePath);
$sheetData = $spreadsheet->getActiveSheet()->toArray(null, true, true, true);
// 处理Excel文件内容并保存到数据库中
foreach ($sheetData as $key => $value) {
// 跳过表头
if ($key == 1) continue;
// 跳过空行
if (empty($value['A'])) continue;
// 获取题目、选项和答案
$title = $value['A'];
$optionA = $value['B'];
$optionB = $value['C'];
$result = $value['F'];
// 将数据保存到数据库中
db('question_bank')->insert([
'title' => $title,
'option_A' => $optionA,
'option_B' => $optionB,
'result' => $result,
]);
}
return $this->success('文件上传成功');
} else {
return $this->error('参数不能为空');
}
} else {
$this->error();
}
}
1. where
php复制代码$where = [
'name' => 'Tom',
'age' => ['>', 20]
];
$result = Db::table('users')
->where($where)
->select();
// 等价于
$result = Db::table('users')
->where('name', 'Tom')
->where('age', '>', 20)
->select();
2. whereRaw
php复制代码$result = Db::table('users')
->whereRaw('age > ? and status = ?', [20, 1])
->select();
// 等价于
$result = Db::table('users')
->where('age', '>', 20)
->where('status', '=', 1)
->select();
3. whereBetween
php复制代码$result = Db::table('users')
->whereBetween('age', [20, 30])
->select();
4. whereNull
php复制代码$result = Db::table('users')
->whereNull('email')
->select();
// 等价于
$result = Db::table('users')
->where('email', 'NULL')
->select();
5. whereIn
php复制代码$result = Db::table('users')
->whereIn('name', ['Tom', 'Jerry', 'Mike'])
->select();
6. page
php复制代码// 该方法用于指定查询结果的分页条件,其参数为一个数字表示当前页数。
$result = Db::table('users')
->page(2)
->select();
// 等价于
$result = Db::table('users')
->limit(10, 10)
->select();
7. having
php复制代码// 查询年龄大于 20 的用户,且他们拥有的订单数不少于 10
// 该方法用于添加 HAVING 子句,与 WHERE 类似,但是主要用于聚合查询
$result = Db::table('users')
->join('orders', 'users.id=orders.user_id', 'LEFT')
->where('age', '>', 20)
->group('users.id')
->having('count(orders.id)', '>=', 10)
->select();
8. group
php复制代码// 查询每个城市的用户数和平均年龄
$result = Db::table('users')
->field('city, count(id) as count, avg(age) as avg_age')
->group('city')
->select();
9. 模糊查询
php复制代码// TODO 1 使用 `where` 方法的回调函数来添加多个查询条件。该回调函数会接收一个 `$query` 对象参数,可以在其中调用多个 `where` 方法实现多条件查询。需要注意的是,多个 `where` 方法之间的关系是 **AND** 关系,即所有条件都要满足。最后调用 `select` 方法执行查询,并返回结果数组。
$query = Db::table('user') // 指定查询的表
->where(function ($query) {
$query->where('name', 'like', '张%') // 姓张
->where('phone', 'like', '156%') // 手机号以156开头
->where('gender', '=', '男') // 性别是男
->where('birthday', '>=', '2002-04-07 00:00:00') // 出生日期大于等于2002年4月7日
->where('birthday', '<', '2002-04-08 00:00:00'); // 出生日期小于2002年4月8日
});
$data = $query->select(); // 执行查询操作,并返回结果数组
// TODO 2 先使用 `where` 方法的回调函数将多个查询条件组合成一个 `$where` 对象。然后在主查询中直接传入 `$where` 对象,一次性实现多条件查询。最后调用 `select` 方法执行查询,并返回结果数组。此时所有条件之间的关系也是 **AND** 关系,即所有条件都要满足
$where = function ($query) {
$query->where('name', 'like', '张%') // 姓张
->where('phone', 'like', '156%') // 手机号以156开头
->where('gender', '=', '男') // 性别是男
->where('birthday', '>=', '2002-04-07 00:00:00') // 出生日期大于等于2002年4月7日
->where('birthday', '<', '2002-04-08 00:00:00'); // 出生日期小于2002年4月8日
};
$query = Db::table('user') ->where($where); // 将所有条件组合成一个 $where 对象,再一次性传入主查询中
$data = $query->select(); // 执行查询操作,并返回结果数组
// TODO 3 使用 `$where` 数组将多个查询条件存储起来。数组中的每个键值对分别代表一个查询条件,其键为查询字段名,其值为一个数组,其中第一个元素为比较运算符,第二个元素为比较的值。最后在主查询中直接传入 `$where` 数组,一次性实现多条件查询。需要注意的是,如果同一个字段有多个查询条件,后面的会覆盖前面的。最后调用 `select` 方法执行查询,并返回结果数组。
$where = [
'name' => '张%', // 姓张
'phone' => '156%', // 手机号以156开头
'gender' => '男', // 性别是男
'birthday' => ['>=', '2002-04-07 00:00:00'], // 出生日期大于等于2002年4月7日
'birthday' => ['<', '2002-04-08 00:00:00'], // 出生日期小于2002年4月8日
];
$query = Db::table('user') ->where($where); // 直接将 $where 数组作为参数传入 where 方法中
$data = $query->select(); // 执行查询操作,并返回结果数组
Log 日志
1. 引入类: use think\Log;
2. 记录日志:
php复制代码// 通过Log类的record()方法,记录一条日志
Log::record('这是一条普通日志');
// 记录一个错误级别的日志,使用error()方法
Log::error('这是一条错误日志');
// getLastSql() 函数获取最后一个执行的 DELETE SQL 语句,并将其打印到日志文件中, db()全局函数,不需要填写表名
Log::error('数据操作失败:' . $e->getMessage() . ' SQL: ' . db()->getLastSql());
// 记录一个信息级别的日志,使用info()方法
Log::info('这是一条信息日志');
3. 配置日志:
php复制代码// 日志配置
return [
// 默认日志记录方式,按照日期记录,每天一个日志文件
'type' => 'File',
// 日志存储路径
'path' => '../runtime/logs/',
// 日志记录级别,Debug级别将记录所有信息,包括Trace信息
'level' => ['error', 'notice', 'warning'],
// 单个日志文件的大小限制,单位为MB
'file_size' => 10240
];
fastadmin的日志配置文件为config/log.php,存储在../runtime/logs/路径下
Validate 验证
1. 引入类: use think\Validate;
2. 定义验证规则:
php复制代码 private function handleData($param)
{
// TODO 对请求参数进行验证
$validate = new Validate([
'name|活动名称' => 'require',
'amount|红包总额' => 'require|number|max:10',
]);
// TODO 将参数中的各个值取出并保存在一个数组中,返回该数组
$data = [
'name' => $param['name'],
'amount' => $param['amount'],
];
return $data;
}
更多验证规则可以参考ThinkPHP5的官方文档:www.kancloud.cn/manual/thin…
3. 执行验证:
php复制代码 public function add()
{
// 实例化验证器对象,使用rules()方法返回的验证规则
$validator = $this->handleData($param);
// 获取请求参数
// $params = input('post.');
// $params = $this->request->isPost()
$params = $this->request->param()
// 执行验证
if (!$validator->check($params)) return $this->error($validator->getError());
// 验证通过,继续执行操作
// ...
}
上传 EXCEL
1. 引入excel类:use PhpOffice\PhpSpreadsheet\IOFactory;
2. 定义方法:
php复制代码public function uploadExcel()
{
$this->request->filter(['trim', 'strip_tags']);
// !非POST请求
if (!$this->request->isPost()) return $this->error('请求方式不正确');
// 获取上传的文件
$file = request()->file('file');
// 判断文件是否上传成功
if ($file) {
// 上传文件并保存到指定目录
$info = $file->validate(['ext' => 'xlsx,xls'])->move(ROOT_PATH . 'public' . DS . 'uploads');
if ($info) {
// 获取上传文件的路径
$filePath = $info->getSaveName();
// 使用PhpSpreadsheet库的IOFactory类来创建一个Xlsx格式的读取器,然后使用该读取器加载Excel文件并读取文件内容
// 读取Excel文件内容
$reader = IOFactory::createReader('Xlsx');
$spreadsheet = $reader->load(ROOT_PATH . 'public' . DS . 'uploads' . DS . $filePath);
$sheetData = $spreadsheet->getActiveSheet()->toArray(null, true, true, true);
// 处理Excel文件内容并保存到数据库中
foreach ($sheetData as $key => $value) {
// 跳过表头
if ($key == 1) continue;
// 跳过空行
if (empty($value['A'])) continue;
// 获取题目、选项和答案
$title = $value['A'];
$optionA = $value['B'];
$optionB = $value['C'];
$result = $value['F'];
// 将数据保存到数据库中
db('question_bank')->insert([
'title' => $title,
'option_A' => $optionA,
'option_B' => $optionB,
'result' => $result,
]);
}
return $this->success('文件上传成功');
} else {
return $this->error('参数不能为空');
}
} else {
$this->error();
}
}
新闻资讯 更多
- 【建站知识】查询nginx日志状态码大于400的请求并打印整行04-03
- 【建站知识】Python中的logger和handler到底是个什么?04-03
- 【建站知识】python3拉勾网爬虫之(您操作太频繁,请稍后访问)04-03
- 【建站知识】xpath 获取meta里的keywords及description的方法04-03
- 【建站知识】python向上取整以50为界04-03
- 【建站知识】scrapy xpath遇见乱码解决04-03
- 【建站知识】scrapy爬取后中文乱码,解决word转为html 时cp1252编码问题04-03
- 【建站知识】scrapy采集—爬取中文乱码,gb2312转为utf-804-03