我有下一个代码:
$properties = $properties
->selectRaw('*,'. $this->userCurrency->c_rate .' / c_rate * p_fixed_price AS
converted_p_fixed_price');
之后,我要按照这个价格排序。
$properties = $properties->whereBetween('converted_p_fixed_price',
[$request->low_price ,$request->hight_price]
);
但是结果是我找不到列:1054 请帮助,如何以正确的方式在该字段之间?
答案 0 :(得分:1)
如引述Here所示:可以在查询选择列表中使用别名来为列指定其他名称。您可以在GROUP BY,ORDER BY或HAVING子句中使用别名来引用列,Standard SQL禁止在WHERE子句中引用列别名。之所以施加此限制,是因为在评估WHERE子句时,可能尚未确定列值,因此必须使用having
而不是whereBetween
。
代码的第二部分可以是这样的:
$properties = $properties
->having('converted_p_fixed_price', '>=', $request->low_price)
->having('converted_p_fixed_price', '<=' ,$request->hight_price);
由于您不能在Laravel中对having
子句使用分页,因此,如果要对结果进行分页,可以使用以下内容:
$properties = $properties
->whereRaw($this->userCurrency->c_rate . ' / c_rate * p_fixed_price >= ' . $request->low_price)
->whereRaw($this->userCurrency->c_rate . ' / c_rate * p_fixed_price <= ' . $request->hight_price)
->paginate($page_length);