基于/laravel-fluent

以流利的方式定义模型属性。自动将属性转换为原生类型。

资助包维护!
lepikhinb

v0.0.7 2022-06-10 17:26 UTC

This package is auto-updated.

Last update: 2024-09-16 04:32:09 UTC


README

该包提供了一种表达式的“流利”方式来定义模型属性。它自动在运行时构建转换,并为模型的属性添加原生自动完成功能。

简介

使用 laravel-fluent,您可以像定义其他任何类的属性一样定义模型属性。值将根据属性的本地类型转换为相应的类型。

之前

<?php

/**
 * @property Collection $features
 * @property float $price
 * @property int $available
 */
class Product extends Model
{
    protected $casts = [
        'features' => 'collection',
        'price' => 'float',
        'available' => 'integer',
    ];
}

之后

<?php

class Product extends Model
{
    use Fluent;

    public Collection $features;
    public float $price;
    public int $available;
}

安装

此版本支持PHP 8.0。您可以通过composer安装此包

composer require based/laravel-fluent

然后,将 Based\Fluent\Fluent 特性添加到您的模型中

<?php

class User extends Model
{
    use Fluent;
}

模型属性

定义公共属性。 laravel-fluent 支持所有原生类型和Laravel原始转换

<?php

class Order extends Model
{
    use Fluent;

    public int $amount;
    public Carbon $expires_at;

    #[AsDecimal(2)]
    public float $total;

    #[Cast('encrypted:array')]
    public array $payload;
}

关系

该包还处理关系。

<?php

class Product extends Model
{
    use Fluent;

    #[Relation]
    public Collection $features;
    public Category $category;

    public function features(): HasMany
    {
        return $this->hasMany(Feature::class);
    }

    public function category(): BelongsTo
    {
        return $this->belongsTo(Category::class);
    }
}

关系方法声明仍然是正确自动完成的必要条件。然而,该包可以自动从属性中解析关系。

<?php

class Product extends Model
{
    use Fluent;

    #[HasMany(Feature::class)]
    public Collection $features;
    #[BelongsTo]
    public Category $category;
}

测试

composer test

待办事项

  • 迁移生成器

鸣谢

许可

MIT许可(MIT)。有关更多信息,请参阅许可文件