Laravel 中使用 artisan make:cast 命令创建和使用类型转换器

将货币值存储为整数(而不是浮点),以避免舍入和精度问题——这是 Laravel 社区广泛接受的方法。然而,这需要在 Laravel 中创建一个强制转换,在检索时将浮点转换为整数,在存储在数据库中时将其转换回整数。使用以下artisan命令创建强制转换
在Laravel中, artisan make:cast 命令用于生成一个新的类型转换器(Cast)。类型转换器允许你定义模型属性在存储到数据库之前和从数据库检索后的转换方式。

使用 make:cast 命令可以创建一个新的Cast类,并将其放置在 App\Casts 目录下。

要创建一个Cast,可以通过运行以下命令:

php artisan make:cast MoneyCast

这将在 App\Casts 目录下创建一个名为 MoneyCast 的新Cast类。

在生成的Cast类中,你可以定义一个 get 方法来转换从数据库中检索到的值,以及一个 set 方法来转换存储到数据库之前的值。

例如,以下是一个简单的Cast示例,将存储在数据库中的JSON字符串转换为数组:

namespace App\Casts;

use Illuminate\Contracts\Database\Eloquent\CastsAttributes;

class  MoneyCast implements CastsAttributes
{
public function get($model, string $key, $value, array $attributes): float
{
    // Transform the integer stored in the database into a float.
    return round(floatval($value) / 100, precision: 2);
}

public function set($model, string $key, $value, array $attributes): float
{
    // Transform the float into an integer for storage.
    return round(floatval($value) * 100);
}
}

然后,在你的模型中使用该Cast,将其应用于指定的属性:

use App\Casts\JsonToArrCast;
use Illuminate\Database\Eloquent\Model;

class YourModel extends Model
{
    protected $casts = [
        'price' => MoneyCast::class,
    ];
}

现在,当从数据库中检索 price 时,它将自动转换为两位的数值。而在保存 price 到数据库时,它将自动转换为整型。

这样,你就可以在Laravel中使用 artisan make:cast 命令创建和使用类型转换器了。
使用场景:

  1. 数据库字段转换:如果你想要在将某个字段的值存储到数据库之前对其进行转换,或者从数据库检索后对其进行转换,你可以使用Cast来处理这些转换逻辑。
  2. 数据验证和处理:你可以在Cast中进行数据验证和处理,确保数据符合预期的格式和要求。
  3. 数据加工和修饰:Cast可以用来对从数据库中检索的值进行进一步的加工和修饰,以满足业务需求。
  4. 数据类型互转:如果需要将模型的属性从一种类型转换成另一种类型,例如将JSON字符串转换成数组或对象,可以使用Cast来实现。
本作品采用《CC 协议》,转载必须注明作者和本文链接
人生就是马拉松,精彩的是后半程
running8
《L05 电商实战》
从零开发一个电商项目,功能包括电商后台、商品 & SKU 管理、购物车、订单管理、支付宝支付、微信支付、订单退款流程、优惠券等
《L02 从零构建论坛系统》
以构建论坛项目 LaraBBS 为线索,展开对 Laravel 框架的全面学习。应用程序架构思路贴近 Laravel 框架的设计哲学。
讨论数量: 0
(= ̄ω ̄=)··· 暂无内容!

讨论应以学习和精进为目的。请勿发布不友善或者负能量的内容,与人为善,比聪明更重要!