在 Laravel Schema 中创建价格列

问题描述 投票:0回答:2

我想在 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();
    });
}

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

php laravel-5 schema
2个回答
35
投票

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

$table->decimal('price', 9, 3);

注意 9 是精度,例如 1234567.89 的精度为 9,
3 是小数位数,即 123456.789 的小数位数为 3

换句话说,如果我们使用的小数位少于 3 位,我们可以使用剩余的实数位。
也可以看看: 如何解释数据库中数字的精度和小数位数?


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

$table->bigInteger('price');

因此,如果我们想存储

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

换句话说,存储您认为需要的最低单位,例如存储厘米而不是米(厘最初是“0.01”数字的希腊语名称)。


7
投票

有适合您用途的“十进制”类型,除非您也不想节省货币,否则似乎很好:

$table-> decimal('amount')

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

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

© www.soinside.com 2019 - 2024. All rights reserved.