如何在 Laravel 数据库查询中格式化然后连接?

How to FORMAT then CONCAT in Laravel DB Query?

我使用这个格式化了 total_price 列;

DB::raw("FORMAT(sales_quotations.total_price, 2) as price),

在此之后,我需要将 currency_name 连接到格式化的 total_price。 但如果我这样做;

DB::raw("CONCAT(settings_currencies.currency_name,' ',  price) as totalPrice"),

它抛出了以下错误,因为它找不到 price。我认为不可能以这种方式拥有它。

LOG.error: SQLSTATE[42S22]: Column not found: 1054 Unknown column 'price' in 'field list' 

有什么方法可以在一行中实现这一点吗?

我试过了;

DB::raw("CONCAT(settings_currencies.currency_name,' ',  FORMAT(sales_quotations.total_price, 2)) as totalPrice")

但是没用。错误是;

LOG.error: SQLSTATE[HY000]: General error: 1270 Illegal mix of collations (latin1_swedish_ci,IMPLICIT), (utf8mb4_unicode_ci,COERCIBLE), (utf8mb4_unicode_ci,COERCIBLE) for operation 'concat'

TIA

我已经解决了上面的问题。在我的例子中,我有一些空的 currency_name,如果它是空的,它会抛出下面的错误(正如我上面提到的)。

LOG.error: SQLSTATE[HY000]: General error: 1270 Illegal mix of collations (latin1_swedish_ci,IMPLICIT), (utf8mb4_unicode_ci,COERCIBLE), (utf8mb4_unicode_ci,COERCIBLE) for operation 'concat'

这是因为排序规则不同,您可以通过将 string/column 转换为一种排序规则(例如 utf8)来解决这个问题。

我的行代码是这样的;

 ->selectRaw('CONCAT(CAST(settings_currencies.currency_name AS CHAR CHARACTER SET utf8)," ",  FORMAT(sales_quotations.total_price, 2)) as totalPrice');