将$ casts转换为float但只有一个小数位

时间:2018-05-04 06:50:14

标签: laravel laravel-5 laravel-5.5

在我的模型中,我添加了$casts字段,因为我需要Laravel给我一个浮点数。我的数据库将其存储为字符串。

所以我在我的模型Score.php中执行了此操作:

<?php

namespace App;

use Illuminate\Database\Eloquent\Model;

class Score extends Model
{
    protected $fillable = [
        'value', 'comment'
    ];

    protected $casts = [
        'user_id' => 'int',
        'value' => 'float'
    ];

这很好,它投了它。然而它的小数位数太多了。我需要它只去小数点后1位,到十分之一。

我的json端点数据如下所示:

{
    "id": 2,
    "name": "Zed",
    "avatar_path": null,
    "score": {
        "id": 2,
        "value": 9.9000000000000003552713678800500929355621337890625,
        "comment": null,
        "user_id": 2,
        "created_at": "2018-05-03 07:03:37",
        "updated_at": "2018-05-03 07:03:41"
    }
},

我希望9.9......成为9.9这可能吗?

在我的架构中,我确实正确地将其创建为$table->decimal('value', 3, 1)

    Schema::create('scores', function (Blueprint $table) {
        $table->increments('id');
        $table->decimal('value', 3, 1)->nullable(); //////// is this correct?

1 个答案:

答案 0 :(得分:2)

如何创建mutator / accessor?

在您的模型中添加

public function getValueAttribute($value) {
    return round($value, 1);
}

获取额外信息,请访问相关的Laravel docs

如果您100%确定只需要一个小数位,那么数据库方法也不错,但这样您就可以存储原始值以供将来使用,并仍然以当前所需的格式进行响应