[top-think/think]【数据库/模型】join方法,在where中含有关联表字段的between time条件时,无法识别关联表的别名

2023-12-27 551 views
2

tp版本:v5.1.19 【数据库】或【模型】的join方法使用'不带数据表前缀的表名 别名'的写法,在where中有between time条件时无法识别关联表的别名。此时关联表的别名会被识别出table,导致生成SQL报错。 例如,在查询order表(关联表)的条件时,普通查询还能正常查询,但出现between time条件时: $data = User::alias('u')->join('order o','o.user_id= u.user_id') ->where([ ['o.create_time', 'between time', ['2018-10-01 00:00:00','2018-10-15 23:59:59'] ]) ->buildSql(); 或 $data = Db::table('user')->alias('u')->join('order o','o.user_id= u.user_id') ->where([ ['o.create_time', 'between time', ['2018-10-01 00:00:00','2018-10-15 23:59:59'] ]) ->buildSql(); 错误信息 SQLSTATE[42S02]: Base table or view not found: 1146 Table 'datebase.o' doesn't exist

回答

9

用 写法1:[ '完整表名或者子查询'=>'别名' ] 也是一样会以上报错

9

between time是这么用的呀。长见识。。。 如果你想用between time可以使用手册上的https://www.kancloud.cn/manual/thinkphp5_1/354029 如果你想用between哪加个time是什么意思?

6

@momoca 我就是想用between time。你说的是时间“快捷查询”的用法,我说的是“查询表达式”的用法。 详情请看手册 [https://www.kancloud.cn/manual/thinkphp5_1/354004] 【between】是区间查询,【between time】是时间区间比较,2者都是查询表达式。

我遇到的问题是,在主表使用between time可以正常生成SQL,在关联表使用between time会报错。 例如,$data = User::alias('u')->join('order o','o.user_id= u.user_id') ->where([ ['u.register_time', 'between time', ['2018-01-01 00:00:00','2018-10-15 23:59:59'] ]) ->buildSql(); 是可以生成SQL,正常查询的。