记录一些ThinkPHP模型关联查询中hasWhere的一些坑点总结

发布时间:2024-01-25浏览次数:130 次
一、模型关联查询时where一定要放在hasWhere之后在使用ThinkPHP做模型关联时,如果不使用hasWhere,只使用with和where,则无顺序上

一、模型关联查询时where一定要放在hasWhere之后

在使用ThinkPHP做模型关联时,如果不使用hasWhere,只使用with和where,则无顺序上的讲究,但是一旦使用了hasWhere,则主模型的where条件,必须在hasWhere之后,否则无效。

二,在使用hasWhere时,字段必须加表限制

如:

Project::field(['pro.id', 'build', 'status', 'create_time'])->select();
// 需要改为
Project::field(['pro.id', 'catalog_id', 'build', 'pro.center_cz', 'pro.status', 'pro.create_time'])->select();

即,所有两个表中,名称相同的字段,都需要加表名前缀。

另外,如果要给字段定义别名的话,field就必须使用数组形式,使用字符串形式会报错:

Project::field('project.id as project_id'])->select(); // 会报错
Project::field(['project.id' => 'project_id'])->select(); //正确

三、hasWhere 和 withCount 不能一起使用,只能二选一

这个不知道是不是坑,在我的项目中,实际测试的时候,hasWhere和with等一起使用,或者withCount 和with一起使用,都没问题,但是一旦三者一起使用,就会报错。

扫一扫,在手机上查看