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()方法为主表起起别名,但同样必须是驼峰形式的表名(一般即模型名)
春花秋月何时了?往事知多少。小楼昨夜又东风,故国不堪回首月明中。
雕栏玉砌应犹在,只是朱颜改。问君能有几多愁?恰似一江春水向东流。