【问题标题】:laravel eloquent model not able to store decimal valueslaravel 雄辩模型无法存储十进制值
【发布时间】:2021-04-07 08:57:36
【问题描述】:

我正在使用 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。

【问题讨论】:

  • 它应该由迁移本身处理。您能提供该文件的原始迁移代码吗?
  • 您可以添加您使用的示例代码吗?您可能发送了带有, 逗号作为十进制分隔符的值
  • @N69S 我已经添加了示例代码。而且我还没有用 `,` 逗号作为十进制分隔符发送值。
  • 然后直接检查您的数据库中的字段格式类型。两者之一是错误的,输入或DB。
  • @sdebarun 我们没有任何迁移。但问题在于 eloquent 模型或 laravel 数据库包没有按要求保存值。

标签: php mysql laravel eloquent


【解决方案1】:

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

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2021-08-11
    • 2017-09-23
    • 2015-08-15
    • 2021-06-01
    • 2013-05-10
    • 1970-01-01
    • 2019-02-12
    • 2013-06-04
    相关资源
    最近更新 更多