雄辩的查询转换为浮动

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
");

revenuechange_rate 目前以字符串形式返回,但我希望它们是浮动的。它们是计算值,所以我不能真正将属性转换添加到模型中。

编辑:我从每条评论的查询中删除了 DECIMAL。

【问题讨论】:

DECIMAL 类型将作为字符串发送,即使您使用 mysqlnd 版本的 PDO 驱动程序,这样做也是为了防止小数在 php 中成为不可靠的浮点数 谢谢,我删除了小数,但它仍然作为字符串返回! 可以使用属性转换。 @JonasStaudenmeir 当它实际上不是来自模型时,我如何使用属性转换?这是一个计算值 revenue 添加到模型的$casts 中,访问时该值将转换为浮点数。 【参考方案1】:

将它们添加到您的模型的$casts

protected $casts = [
    'revenue' => 'float',
    'change_rate' => 'float',
];

【讨论】:

以上是关于雄辩的查询转换为浮动的主要内容,如果未能解决你的问题,请参考以下文章

将原始查询转换为雄辩的 laravel

雄辩地执行子查询?

我雄辩的查询构建器实例返回空,而 sql 子句返回结果。会欣赏第二只眼睛

将此查询转换为 eloquent

需要将查询转换为 Eloquent Model laravel

如何将复杂的 sql 查询转换为 laravel Eloquent