首页 > 解决方案 > laravel 雄辩模型无法存储十进制值

问题描述

我正在使用 Laravel 5.7 和 PHP 7.3,我必须在数据库中存储十进制字段

表列描述如下

'commission_percentage', 'decimal(12,4)'
'commission_amount', 'decimal(12,4)'

我正在尝试使用 eloquent 模型将此列的十进制值存储在 mysql 中。

这是示例代码。

$per = 10.23;
$commission = 2.1234;
$createArr = [    
                  'commission_percentage' => $per,
                  'commission_amount' =>  $commission
             ];
            
MyModel::create($createArr);

我雄辩的模型看起来像

class MyModel extends Model
{
    protected $table = 'my_table';
    protected $guarded = ['id'];
    protected $casts = [
        'commission_percentage' => 'decimal:4',
        'commission_amount' => 'decimal:4'
    ];

}

而且我也试过

protected $casts = [
            'commission_percentage' => 'float',
            'commission_amount' => 'float'
        ];

但没有运气。我仍然在数据库中获得 10.0000 和 2.0000。

即使我尝试使用原始查询插入值

DB::insert('insert into my_table (commission_percentage,commission_amount ) values(?, ?)', [$per, $commission]);

但是运气不好,因为我仍然在数据库中获得 10.0000 和 2.0000。

标签: phpmysqllaraveleloquent

解决方案


我为此找到的解决方法是将变量类型转换为“字符串”

$per = 10.23;
$commission = 2.1234;
$createArr = [    
                  'commission_percentage' => (string) $per,
                  'commission_amount' => (string) $commission
             ];
            
MyModel::create($createArr);

推荐阅读