Loading

TP6使用hasWhere遇到字段重名导致报错的解决办法

出现问题

在TP6中当我们使用hasWhere方法时,如果附表的字段和主表的字段重名,而我们又恰巧需要使用这个重名的字段来作为筛选条件时,就会报错。

解决思路

所以为了能清晰的表明我们的需要的这个字段究竟是哪个表的字段,在sql中我们一般需要在前面加上表名或者别名。但很坑的是,tp6使用hasWhere后会自动将模型转换成驼峰的名称,并且不带表前缀,所以我们这里需要使用模型名称,而且这是固定的,因为tp6内部就是固定这么生成的sql。或者也可以使用实际的表全程,我这里是‘wx_tray_goods’

代码示范

return $this->hasWhere('goods_labels',['goods_batch' => $goods_batch])->where([
			'type' => 0,
			'TrayGoods.goods_id' => $goods_id, //此处的前缀必须是模型名 TrayGoods 或 表全称 wx_tray_goods
		])->order('total')->select();
注意
  • where 必须在 hasWhere 之后,否则不生效
  • 可以使用alisa()方法为主表起起别名,但同样必须是驼峰形式的表名(一般即模型名)
posted @ 2022-07-28 19:05  木头人4216  阅读(848)  评论(0编辑  收藏  举报