在 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 模式中创建价格列的主要内容,如果未能解决你的问题,请参考以下文章
在使用第三方API并在Laravel中创建域时使用适配器模式
如何在 laravel nova 中创建可重用的 vue 组件?