雄辩的查询转换为浮动
Posted
技术标签:
【中文标题】雄辩的查询转换为浮动【英文标题】:Eloquent Query Cast to Float 【发布时间】:2018-05-17 18:08:48 【问题描述】:我有一个雄辩的查询,我想将一个字段转换为“浮点数”。它是一个聚合值,它现在作为一个字符串返回,这里是一个查询示例:
$productStats->selectRaw("
product.id,
TRIM(product.name) AS item_name,
SUM(IF(order.order_paid_date BETWEEN '" . $start->timestamp . "' AND '" . $end->timestamp . "' AND order.order_type = 'order' AND (open_count > 0 OR click_count > 0), order_item.total_price, 0)) as revenue,
COALESCE(CAST(SUM(IF(order.updated_date BETWEEN '" . $start->timestamp . "' AND '" . $end->timestamp . "' AND order.order_type = 'order' AND (open_count > 0 OR click_count > 0), 1, 0)) as SIGNED), 0) / CAST(SUM(IF(order.updated_date BETWEEN '" . $start->timestamp . "' AND '" . $end->timestamp . "' AND order.order_type = 'order', 1, 0)) as SIGNED) AS change_rate
");
revenue
和 change_rate
目前以字符串形式返回,但我希望它们是浮动的。它们是计算值,所以我不能真正将属性转换添加到模型中。
编辑:我从每条评论的查询中删除了 DECIMAL。
【问题讨论】:
DECIMAL 类型将作为字符串发送,即使您使用 mysqlnd 版本的 PDO 驱动程序,这样做也是为了防止小数在 php 中成为不可靠的浮点数 谢谢,我删除了小数,但它仍然作为字符串返回! 你可以使用属性转换。 @JonasStaudenmeir 当它实际上不是来自模型时,我如何使用属性转换?这是一个计算值 将revenue
添加到模型的$casts
中,访问时该值将转换为浮点数。
【参考方案1】:
将它们添加到您的模型的$casts
:
protected $casts = [
'revenue' => 'float',
'change_rate' => 'float',
];
【讨论】:
以上是关于雄辩的查询转换为浮动的主要内容,如果未能解决你的问题,请参考以下文章
我雄辩的查询构建器实例返回空,而 sql 子句返回结果。会欣赏第二只眼睛