think-orm icon indicating copy to clipboard operation
think-orm copied to clipboard

hasWhere 未自动字段加上表别名

Open yangrongzhou opened this issue 4 years ago • 0 comments

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 语句就报错了。

yangrongzhou avatar Aug 23 '21 14:08 yangrongzhou