think-orm
think-orm copied to clipboard
hasWhere 未自动字段加上表别名
hasWhere 报错,执行代码如下:
$list = Order::with(['orderGoods'])
->where('is_hdfk', '=', 1)
->where('pay_status', '=', 3)
->whereBetweenTime('create_time', $beginTime, $endTime)
->hasWhere('orderGoods', ['goods_id'=> $goodsId])
->select();
报错提示:SQLSTATE[42S02]: Base table or view not found: 1051 Unknown table 'Order'
根据报错跟踪信息找到执行的 sql 语句结构为:
SELECT `Order`.* FROM `tb_order` JOIN `tb_order_goods` `OrderGoods` ON `Order`.`order_id`=`OrderGoods`.`order_id` WHERE `is_hdfk` = :ThinkBind_1_445930294_ AND `pay_status` = :ThinkBind_2_805866784_ AND `create_time` BETWEEN :ThinkBind_3_493307466_ AND :ThinkBind_4_724524040_ AND `OrderGoods`.`goods_id` = :ThinkBind_5_1775612536_ GROUP BY `Order`.`order_id`
可以看得出问题,是语句中 FROM tb_order 并没有给表加上别名 Order,手动加上 alias('Order') 可解决,但我认为这应该由框架自动加。
另外一个可能出现的Bug:框架使用 JOIN 来实现 hasWhere ,但查询时 Order 模型的 where 条件 is_hdfk、pay_status、create_time 等字段并不会自动加上表名,如果 tb_order_goods 表也有 create_time 字段,sql 语句就报错了。