IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 开发测试 -> 使用thinkphp6 开发遇到的坑 -> 正文阅读

[开发测试]使用thinkphp6 开发遇到的坑

最近和其他同事配合使用thinkphp开发一个平台,之前一直使用的是laravel,经过这件事我对以后开发项目还是laravel好了。下便总结下thinkphp遇到的几个坑吧:

前提:我个人喜欢将model实例化之后在进行列表的查询处理
eg:
User为用户表, Apply为用户申请表, Work为工作表
user表的字段为:

字段说明
id自增id
name姓名

apply表字段为

字段说明
id自增id
from_id来源id
user_id申情人id
resaon申请原因
status状态:0-待审核 1-已审核 2审核失败

work表字段为

字段说明
id自增id
title工作名称
user_id负责人id

其中为User与Apply、Work一对多关联,在用户Modle中处理关系为
User Model:

public function applies() {
	return $this->hasMany(Apply::class, 'user_id', 'id');
}

public function works() {
	return $this->hasMany(Work::class, 'user_id', 'id');
}

Apply Model

public function user() {
	return $this->belongTo(User::class, 'user_id', 'id');
}

public function work() {
	return $this->belongTo(Work::class, 'from_id', 'id');
}

Work Model


public function user() {
	return $this->belongTo(User::class, 'user_id', 'id');
}

接下来为列表查询,查询申请表apply的数据:

 $builder = new User();

1、hasWhere的表达要放在其他where条件之前
错误:

	if($search_text = $request->param('search_test', null)) {
		$builder = $builder->where('name', 'LIKE' , '%' . $search_text . '%');
	}
	$status = $status = $request->param('status', null);
	if(!is_null($status)) {
		$builder = $builder->hasWhere('applies', function($query) use ($status) {
			$query->where('status', $status);
		});
	}
	$data = $builder->alias('User')->select();

正确:

	$status = $status = $request->param('status', null);
	if(!is_null($status)) {
		$builder = $builder->hasWhere('applies', function($query) use ($status) {
			$query->where('status', $status);
		});
	}
	if($search_text = $request->param('search_test', null)) {
		$builder = $builder->where('name', 'LIKE' , '%' . $search_text . '%');
	}
	
	$data = $builder->alias('User')->select();

2、当多个hasWhere的时候我更愿意使用when来查询:

$status = $request->param('status', null);
$search_text = $request->param('search_text', null);
$work_title = $request->param('work_title', null);
$builder = new Apply();
$data = $builder->when($status, function($query) {
	$query->hasWhere('user', function($q) use ($search_text) {
		$q->where('name', 'LIKE', '%' . $search_text . '%');
	});
})->when($work_title, function($query) use ($work_title) {
	$query->hasWhere('work', function($q) use ($search_text) {
		$q->where('title', 'LIKE', '%' . $search_text . '%');
	});
})->select();

3、当有多个了hasWhere的时候,应该是只能在一个hasWhere中使用一个回调方法
错误:(测试了一下只有第二个的条件被引用了,前边的没有被引用)

$data = Apply::hasWhere('user', function($query) {
	$query->where('name', '***');
})->hasWhere('work', function($query) {
	$query->where('title', '***');
})->select();

正确

$data = Apply::hasWhere('user', ['name' => '***'])
		->hasWhere('work', ['title' => '***'])
		->select();

4、删除的时候需要加筛选条件,或者先获取到数据再删除
错误:

User::delete();

正确:

User::select()->delete()

我会一直更新这个坑的文章,以上是目前遇到的处理办法,大家还有好的办法可以留言交流下。。。

  开发测试 最新文章
pytest系列——allure之生成测试报告(Wind
某大厂软件测试岗一面笔试题+二面问答题面试
iperf 学习笔记
关于Python中使用selenium八大定位方法
【软件测试】为什么提升不了?8年测试总结再
软件测试复习
PHP笔记-Smarty模板引擎的使用
C++Test使用入门
【Java】单元测试
Net core 3.x 获取客户端地址
上一篇文章      下一篇文章      查看所有文章
加:2022-04-04 12:40:45  更:2022-04-04 12:41:56 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/18 1:51:53-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码