在 laravel 模式中创建价格列

Posted

技术标签:

【中文标题】在 laravel 模式中创建价格列【英文标题】:creating a column for price in a laravel schema 【发布时间】:2017-12-12 14:12:44 【问题描述】:

我想在 laravel 架构中创建价格列。

public function up()

    Schema::create('cameras', function (Blueprint $table) 
        $table->increments('id');
        $table->string('name');
        $table->string('condition');
        $table->string('price');
        $table->string('type');
        $table->timestamps();
    );

或者我可以使用其他数据类型吗?因为我在文档中看不到任何货币价值。任何帮助将不胜感激。

【问题讨论】:

将它们存储在float 类型中有什么问题?货币数据类型需要什么? 【参考方案1】:

您可以使用小数精确存储价格值:

$table->decimal('price', 10, 2);

或者,您也可以使用大整数并将金额存储为基本货币单位,如美分。像这样:

$table->bigInteger('price');

因此,如果我们想存储 $ 107.45(107 美元,45 美分),我们首先将其乘以 100,然后将 10745 存储在价格列中。并在检索时除以 100

【讨论】:

我相信你的意思是 $table-> 而不是 $this-> ? 我会编辑,但不喜欢用代码这样做。感谢您的原始回复,感谢您的更新! ?【参考方案2】:

为您的目的提供“浮动”类型,除非您也不想节省货币,否则它似乎很好:

$table->float('amount')

可用类型在文档中列出。 https://laravel.com/docs/5.4/migrations#creating-columns

如果您确实想用价格保存货币,则必须使用 string ,或者为货币类型创建一个新列可以是另一种解决方法。

【讨论】:

浮点数会导致精度问题。最好使用decimal 应该使用小数,见this post

以上是关于在 laravel 模式中创建价格列的主要内容,如果未能解决你的问题,请参考以下文章

如何在 Laravel 中创建数据库模式(表)?

在使用第三方API并在Laravel中创建域时使用适配器模式

如何在 laravel nova 中创建可重用的 vue 组件?

如何在 laravel 中创建自定义关系?

在 laravel 中创建一个下拉列表来选择用户角色 - laravel

如何在 laravel 中创建子域