在 Laravel 中使用计算列

36 篇文章 0 订阅

MySQL 和 SQLite(从 3.31.0 版开始)支持生成的列定义。让我们看看如何在我们的数据库模式中使用计算列,以及在什么情况下我们应该将它们添加到我们的迁移中。

 

虚拟列和存储列

基本上有两种类型的计算列:virtual和stored。两者之间的主要区别是 virtual 每次用户运行查询时都会计算,但它不占用任何空间,但是,存储的数据需要一些空间,但每次行获取时都会更新插入或更新。简而言之:虚拟“更小”但“更慢”,存储“更大”但更快。

让我们看看一些 SQL,如何创建计算列:

drop table if exists users;

create table users (
    id int auto_increment primary key,
    first_name varchar(50) not null,
    last_name varchar(50) not null,
    salary int(10) not null,
    name varchar(101) as (concat(first_name, ' ', last_name)),
    insurance int(10) as (salary * 0.1) stored
);

如我们所见,我们可以根据行中的其他列生成列。在某些情况下,这可能非常方便,特别是如果我们想让这些计算自动化。

迁移模式中的计算列

现在,让我们看看如何在 Laravel 迁移中添加计算列。

Schema::create('products', function (Blueprint $table) {
    $table->id();
    $table->string('name');
    $table->integer('price');
    $table->integer('tax')->virtualAs('price * 0.27')->nullable();
    $table->integer('discount')->storedAs('price - 100')->nullable();
});
请注意,Laravel 8.x 支持 SQLite 的计算列。

这里的好处是,在我们的迁移中创建计算列真的很容易。这也意味着我们可以轻松地将这些附加到我们的模型中,而无需将计算属性添加到模型本身。

此外,重要的是我们可以索引计算列。因此,它也可以提高性能。

总结

在某些情况下,使用生成的列是一种很好的方法。如果你想使用虚拟或存储方式,这取决于你和你的情况,但它们都提供了很好的功能,并且有可能使框架本身的代码更小更清晰

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

rorg

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值