为什么 table 别名在此查询表达式中转换为小写
Why is the table alias converted to lower case in this query expression
该查询将获取所有降价超过30%的产品:
return $query->where([
'Products.reduced_price / Products.price <' => 0.7,
]);
此查询导致以下错误:
Column not found: 1054 Unknown column 'products.price' in 'where clause'
为什么 table 别名转换为小写?此错误似乎取决于您的 mysql 设置。一些设置似乎不区分大小写(例如我的开发机器)其他像我的生产服务器一样区分大小写;)
遗憾的是,在这种情况下无法省略 table 别名“Products”,因为连接的 table 也有一个名为“price”的列。遗漏别名会导致此错误:Column 'price' in where clause is ambiguous
原因是QueryExpression
class的_parseCondition
方法。它将假定第一个 space 之后的所有内容都是运算符并在其上使用 strtolower
,从而使别名小写。
这可以通过从表达式中删除所有 space 来轻松缓解,如下所示:
return $query->where([
'Products.reduced_price/Products.price <' => 0.7,
]);
该查询将获取所有降价超过30%的产品:
return $query->where([
'Products.reduced_price / Products.price <' => 0.7,
]);
此查询导致以下错误:
Column not found: 1054 Unknown column 'products.price' in 'where clause'
为什么 table 别名转换为小写?此错误似乎取决于您的 mysql 设置。一些设置似乎不区分大小写(例如我的开发机器)其他像我的生产服务器一样区分大小写;)
遗憾的是,在这种情况下无法省略 table 别名“Products”,因为连接的 table 也有一个名为“price”的列。遗漏别名会导致此错误:Column 'price' in where clause is ambiguous
原因是QueryExpression
class的_parseCondition
方法。它将假定第一个 space 之后的所有内容都是运算符并在其上使用 strtolower
,从而使别名小写。
这可以通过从表达式中删除所有 space 来轻松缓解,如下所示:
return $query->where([
'Products.reduced_price/Products.price <' => 0.7,
]);