在laravel模式中为价格创建列

Alt*_*ian 2 php schema laravel-5.4

我想在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();
    });
}
Run Code Online (Sandbox Code Playgroud)

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

Sum*_*hwa 10

我同意@stardust4891,最好使用小数来精确存储价格值:

$table->decimal('price', 10, 2);
Run Code Online (Sandbox Code Playgroud)

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

$table->bigInteger('price');
Run Code Online (Sandbox Code Playgroud)

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


小智 6

除非你不想节省货币,否则你的目的有"浮动"类型似乎很好,
即:$ table-> float('amount').
可用类型列在文档中. https://laravel.com/docs/5.4/migrations#creating-columns

如果您确实想要使用价格保存货币,则必须使用字符串,或者为货币类型创建新列可能是另一种解决方法.

  • float 会导致精度问题。最好使用“十进制”。 (8认同)