davidwesdijk/laravel-polymorphic-eav

将实体-属性-值模型与Laravel应用程序中的多态Eloquent关系集成。

1.0.6 2022-02-15 13:34 UTC

This package is auto-updated.

Last update: 2024-09-15 19:25:55 UTC


README

Latest Version on Packagist Total Downloads

将实体-属性-值模型与Laravel应用程序中的多态Eloquent关系集成。

安装

您可以通过composer安装此包

composer require davidwesdijk/laravel-polymorphic-eav

用法

准备您的模型

为了将实体-属性-值模型实现到Eloquent模型中,唯一需要采取的操作是添加HasEntityAttributeValues特质。这就是使用此包带来的全部功能所需的所有操作。

use DavidWesdijk\LaravelPolymorphicEav\Traits\HasEntityAttributeValues;

class Product extends Model
{
     use HasEntityAttributeValues;

    // Implementation of your Eloquent model
}

分配属性

属性,当添加了特质时,可以通过Eloquent模型上的props访问器进行访问和分配。只需设置其值!

class ProductController extends Controller
{
    public function update(AnyValidatedRequest $request, Product $product)
    {
        $product->props->details->color = $request->color; // E.g. 'red'

        // That's it!
    }
}

访问属性

分配的属性可以通过在props访问器中定义组和属性来简单地访问,如下例所示。其概念是所有必需的属性都必须可访问,不抛出异常,以保持您的代码干净、可读和维护。

// This attribute has been set before
$product->props->details->color; // 'red'

// This attribute has never been set before 
$product->props->details->sku; // null

// Even if the group has never been defined 
$product->props->foo->bar; // null

其他功能

如果您想删除一个属性,您可以将它的值设置为null,或者您可以简单地取消设置值。数据库条目将被删除。

unset($product->props->details->color);

$product->props->details->color; // null

序列化

您可能会遇到需要在数组或JSON中具有所有分配属性的情况。此包尊重ArrayableJsonable接口。

$product->props->details->toArray(); ['color' => 'red']
$product->props->details->toJson(); '{color: "red"}'

测试

composer test

变更日志

有关最近更改的更多信息,请参阅变更日志

贡献

有关详细信息,请参阅贡献

安全

如果您发现任何安全相关的问题,请通过电子邮件david@favor.media报告,而不是使用问题跟踪器。

鸣谢

许可证

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